数据

JSONPath 与 jq 查询

面对一段又长又深的 JSON,肉眼找一个字段、一层数组往往比想象中费劲。这个工具把两套业内最常用的查询语言放在同一个页面:JSONPath 负责“取值”,用 $.store.book[*].author 这样的路径精准挑出你要的节点;jq 负责“变换”,能过滤、映射、聚合,写出接近编程的管道。左边贴 JSON,底部输入表达式,右边即时刷新结果,并实时告诉你命中了几条。默认的 JSONPath 无需加载、秒开即用,切到 jq 时才按需拉取 wasm 引擎。全部在你的浏览器本地运行,粘进来的数据不会离开这个标签页。

  • JSONPath 与 jq 双引擎同页切换:一个负责精准取值,一个负责过滤、映射与聚合,覆盖从简单挑字段到复杂变换的全部场景
  • 输入即出结果,改 JSON 或改表达式都会防抖后立即刷新,并明确标出命中条数,区分“零匹配”和“语法出错”
  • JSON 解析错误与查询语法错误分开提示,各自定位到输入或表达式,绝不悄悄吐出残缺或空白结果
  • 默认 JSONPath 秒开无需加载,jq 引擎仅在你切换过去时才按需下载并缓存,整个过程都在浏览器本地完成,数据不出本机
工具/JSONPath 与 jq 查询器
JSON 输入
查询结果
示例

JSONPath 与 jq 语法速查

不熟悉这两种语法也不要紧。下面两张表列出最常用的符号与函数,配上作用说明和可直接套用的示例——照着改成你自己的字段,几分钟就能上手。

JSONPath 常用语法

$
根节点,所有路径的起点 $
@
当前节点,用在过滤表达式里 @.price
.name
取子节点,即对象的某个键 $.store
..
递归下探,匹配任意深度的后代 $..author
*
通配符,匹配同一层的全部元素 $.store.*
[n]
数组下标,负数表示从末尾倒数 $..book[0]
[a:b]
数组切片,截取一段区间 $..book[0:2]
[?(expr)]
过滤器,只保留满足条件的元素 $..book[?(@.price < 10)]
['a','b']
一次取多个键 $..book[0]['title','price']

jq 常用语法

.
恒等,代表整个输入 .
.foo
取对象的某个字段 .store
.a.b
逐层取嵌套字段 .store.bicycle.color
.[]
遍历数组或对象的每个值 .store.book[]
|
管道,把上一段的输出交给下一段 .store.book[] | .title
select(cond)
只保留满足条件的值 .store.book[] | select(.price < 10)
map(f)
对数组的每一项施加变换 .store.book | map(.price)
add / length
对数组求和 / 求元素个数 [.store.book[].price] | add
sort_by(f)
按给定字段对数组排序 .store.book | sort_by(.price)

功能简介

一个查询工具好不好用,取决于它能不能让你看清结果、也看清错误。这个工具围绕这两点搭建:即时的结果、可信的命中计数,以及把输入问题和表达式问题分得清清楚楚的提示。

  1. 01

    双引擎,各司其职

    JSONPath 擅长按路径取值,语法简洁、上手快;jq 是功能完整的 JSON 处理器,能过滤、映射、聚合乃至重组结构。同一页面一键切换,简单挑字段和复杂变换都不用换工具。

  2. 02

    输入即出结果

    不需要点任何“运行”按钮。无论你改动 JSON 还是改动表达式,结果都会在防抖后立即刷新,边写边看,探索一段陌生数据的结构快得多。

  3. 03

    可信的命中计数

    每次查询都会标出命中了几条,让你一眼看出结果是一条、多条还是空。空结果会明确显示“无匹配”,而不是留一片让人猜的空白。

  4. 04

    错误分层提示

    JSON 本身解析不了,会定位到输入面板;表达式写错了,会定位到查询栏并附上引擎的原始报错。两类问题分开呈现,你能立刻知道该改哪一边。

  5. 05

    缩进与紧凑随手切换

    结果既能按多行缩进展开、方便逐层阅读,也能压成单行紧凑形式、方便直接复制进代码或命令。两种形态一键切换。

  6. 06

    一键复用与导出

    内置一份经典的书店 JSON 与由浅入深的示例表达式,点一下就能套用;结果可一键复制或下载为 .json 文件,衔接到下一步。

如何使用

从一段陌生的 JSON 到你要的那部分数据,几步就能完成,全程结果和命中数都摆在眼前。

  1. 01

    把 JSON 粘贴到左侧输入面板,或点“示例”载入一份现成的书店数据练手。

  2. 02

    在底部选择查询语言:只想取值就用 JSONPath,需要过滤、计算或重组就切到 jq。

  3. 03

    在查询栏输入表达式,或直接点下方的示例表达式套用,右侧会即时刷新结果并标出命中条数。

  4. 04

    用“缩进/紧凑”调整结果形态,再一键复制或下载为 .json,接入你的代码、脚本或文档。

功能说明

一些让结果值得信任、也用得顺手的细节。

  • JSONPath 由成熟的 jsonpath-plus 提供,支持递归下探、通配、过滤表达式与数组切片等完整语法。
  • jq 采用官方 jq 编译成的 WebAssembly 版本,语法与命令行 jq 完全一致,你在终端里怎么写,这里就怎么写。
  • 查询随输入即时执行,没有“运行”按钮,也没有改完表达式还要再等一下的延迟。
  • JSON 解析错误与查询语法错误分别就地显示原始信息,而不是默默给出空结果或残缺输出。
  • 一切都在浏览器本地运行,你粘贴的 JSON——包括线上接口返回的敏感数据——都不会被上传或记录,关掉标签页即消失。

适合哪些场景

这些场景里,一条查询能省下大量翻找的时间。

  1. 调试接口返回

    接口返回一大坨嵌套 JSON,想确认某个字段到底藏在哪、值对不对,一条路径就能把它挑出来,不必在编辑器里一层层折叠展开。

  2. 从数据里做统计

    想知道一批记录里价格的合计、去重后的作者名单、或某个数组的长度,用 jq 一行管道就能算出来,比写临时脚本快得多。

  3. 验证与调试表达式

    在把 JSONPath 或 jq 写进代码、CI 脚本或日志管道之前,先在这里对着真实数据试一遍,确认它匹配到的正是你想要的那些节点。

  4. 理解陌生的数据结构

    拿到一份没有文档的 JSON,用 $.. 递归下探、用通配符扫一层,边写边看结果,能快速摸清它的层级和字段分布。

延伸阅读

只想把 JSON 排版整齐、或校验格式,可以用JSON 格式化 ;想比较两份 JSON 的差异,则可以试试JSON 差异对比

JSONPath 与 jq,分别适合什么

两者都在 JSON 上工作,但出发点不同:JSONPath 是“查询”,只负责把你要的节点挑出来;jq 是“处理”,可以在挑出来之后继续加工。理解这条分界线,就知道每次该用哪一个。

  1. JSONPath:按路径取值

    它借鉴 XPath 的思路,用一条路径描述你要的节点。$ 是根,. 逐层深入,取出的永远是原文档里已有的值,不做任何改写。想“把某处的数据挑出来”,它最直接。

  2. JSONPath 的核心符号

    $ 表示根节点,.. 表示递归下探到任意深度,* 是通配符匹配同层全部,[?(@.price < 10)] 是过滤表达式,[-1:] 这类切片按位置截取。几个符号组合起来就能覆盖绝大多数取值需求。

  3. jq:把 JSON 当数据流处理

    jq 是一门小巧但完整的语言。它把 JSON 看作在管道 | 中流动的值,每一段过滤器加工上一段的输出,可以取值、筛选、改形状,也可以计算。想“取出来之后再算点什么”,它才是答案。

  4. jq 的常用能力

    map 对数组逐项变换,select 按条件筛选,add 求和,unique 去重,length 求长度,max_by 取极值。把它们用管道串起来,就能一行写出统计、重组、汇总这类 JSONPath 做不到的事。

  5. 一个负责选,一个负责算

    简单地说:只是想“把某个值找出来”,JSONPath 更短更直观;想在找出来之后“再过滤、再计算、再换个结构”,就交给 jq。这也是本工具把两者并排放在一起的原因。

  6. 结果为什么是一组值

    两种引擎的输出天然都是“一组值”:JSONPath 匹配到的所有节点、jq 流出的每一个结果。所以工具会告诉你命中几条,并把它们按你选的缩进或紧凑形式一并列出。

使用建议

一些让查询既准确又高效的习惯。

  • 先想清楚是“取值”还是“变换”:只要挑出已有节点就用 JSONPath,需要筛选、计算或改结构再上 jq,别用错工具把简单事写复杂。
  • 善用递归下探。JSONPath 的 .. 和 jq 的 .. 都能跨层级搜索,面对结构不确定的数据时,比逐层写死路径更省心也更健壮。
  • 用命中计数当校验。写完表达式先看命中几条,和你预期的数量对不上,往往就是路径或条件写偏了。
  • 把结果切成紧凑形式再复制进代码或命令行,多行缩进则留给需要逐层阅读、核对的时候。
  • 在这里验证通过后再把表达式落地到代码或脚本里。工具用的就是标准的 jsonpath-plus 与官方 jq,行为和线上一致。

边界与注意事项

这个工具做什么,又把什么留给别的步骤。

  • 它针对单个 JSON 文档做查询,不做多文件合并,也不会去请求 URL 里引用的外部数据。
  • 它专注于查询与变换,不是完整的 JSON 编辑器;大段结构性的改写、格式化排版请用相应的格式化工具。
  • JSONPath 的实现遵循 jsonpath-plus 的语法,个别扩展写法在不同实现间可能有差异,以本工具的结果为准。
  • 无法解析的 JSON 会被如实报错而不是自动修复,因此严重损坏的输入不会产生半对半错的结果。

常见问题

关于 JSONPath、jq,以及这个工具怎么用的常见问题。

JSONPath 和 jq 有什么区别,我该用哪个?

一句话:JSONPath 负责“取值”,jq 负责“处理”。如果你只是想把 JSON 里某个位置的节点挑出来,JSONPath 的路径语法最短最直观,比如 $.store.book[*].author。如果你还要在挑出来之后做过滤、求和、去重、改结构这类加工,就需要 jq——它是一门完整的 JSON 处理语言。工具把两者放在同一页,正是让你按需要随手切换。

我可以直接用命令行 jq 的写法吗?

可以。这里的 jq 是官方 jq 编译成的 WebAssembly 版本,语法与命令行完全一致,管道、内置函数、select、map、reduce 等都照常可用。你在终端里怎么写,粘到这里就怎么跑,无需任何改动。

为什么切到 jq 时会有一个加载过程?

JSONPath 体积很小且同步运行,所以是默认引擎,打开即用、无需等待。jq 是一个约 1MB 的 WebAssembly 引擎,只有在你第一次切换到 jq 时才会按需下载,之后本次访问都会走缓存。这样只用 JSONPath 的访客就完全不必为 jq 付出加载成本。

结果里的“命中 N 条”是什么意思?

它表示当前表达式匹配或产出的值有几个。JSONPath 会把所有符合路径的节点收集成一组,jq 则会输出一串结果值,这个数字就是它们的数量。命中 0 条时会显示“无匹配”,帮助你区分“确实没有符合的数据”和“表达式写错了”。

我的 JSON 会被上传吗?

不会。所有解析和查询都在你的浏览器里完成,粘贴的 JSON 和查询结果都不会被传输或存储,关闭标签页后即消失。因此即便是线上接口返回的敏感数据,也可以放心在这里调试。

为什么表达式写错了,之前的结果还留着?

这是刻意的设计。当查询出现语法错误时,工具会在结果区给出引擎的原始报错,而不是把你上一次的可用结果直接清空。这样你在连续调整表达式时不会来回“闪烁”,改对了结果自然就回来了。

JSON 无效时会怎样?

如果左侧的 JSON 本身无法解析,工具会在输入面板下方标出解析错误的具体信息,并暂不执行查询——因为对一段无法解析的数据谈匹配没有意义。先按提示修正 JSON,查询会立刻恢复。

更多相关工具

继续探索其余的数据与格式工具。