JSONPath 测试

在浏览器里运行 JSONPath 查询。要排版文档,请用 JSON 格式化

可以查什么

JSONPath 从一份 JSON 文档里取出值。这一页运行一个实用子集,并把每个匹配以 JSON 返回。要先整理文档,用 JSON 格式化。

怎么用

  1. 上面的框贴 JSON,JSONPath 里写路径。路径一开始是 $。
  2. 转换运行这条查询。路径旁边的一行写着回来了多少个匹配。
  3. 显示示例载入 {"store":{"book":[{"author":"Nigel","price":8},{"author":"Evelyn","price":12}],"bicycle":{"price":19}}} 和路径 $.store.book[*].author。结果是 Nigel 和 Evelyn 的 JSON 数组,个数是 2。
  4. 框是空的时候,那几个路径按钮会填入同一份文档。$.store.book[?(@.price<10)].author 返回 Nigel。$..price 返回 8、12 和 19。
  5. 全部清除清空文档,把路径设回 $,并清掉个数。复制结果复制这些 JSON 匹配。

这一页接受的路径

$ 是根。.key 和 ['key'] 读一个属性。[n] 读一个下标,负数从末尾数。[*] 读每个元素或属性。[start:end:step] 切片,不含 end。[0,2] 取这些下标。..key 走遍每个嵌套对象,收集这个键。

过滤的形式是 [?(@.price<10)] 或 [?(@.author=='Nigel')]。比较符是 ==、!=、<、>、<= 和 >=。文本按原文比较。大小比较用于数字。过滤作用在数组上。不认识的路径,或解析不了的 JSON,都是错误。零个匹配是合法的空数组。

用在哪

  • 从列表里的每个对象抽出一个字段。
  • 留下价格低于某个数的那些行。
  • 找出每一个价格,包括嵌在不同对象里的。

常见问题

只有一个作者,为什么结果还是数组?

每条查询都返回匹配列表,所以一个结果仍是只有一个元素的数组。

脚本表达式能用吗?

过滤只是对 @ 及其字段做一次比较。其他脚本写法会报错停下。