← 返回工具箱

JSONPath 查询

JSONPATH · 数据处理

用 JSONPath 表达式在本地提取与过滤 JSON 数据:递归下降、切片、条件过滤都支持,匹配值与路径并列输出。

JSON 输入
JSONPath 表达式
匹配值
匹配路径(dot 表示)
支持 $.a.b、$..a 递归、[0]、[0,2]、[1:4]、[*]、[?( @.price < 10 )] 过滤(支持 == != < <= > >=、&& / ||、存在判断)。不支持脚本表达式、函数与负索引。

>_ 使用指南 · GUIDE

用 JSONPath 表达式在本地提取与过滤 JSON 数据:$.store.book[*].title 取所有书名、$..price 递归找全部价格、$..book[?(@.price<10)] 按条件筛选。递归下降、数组切片、条件过滤都支持,匹配到的值与所在路径并列输出——既知道「找出了什么」,也知道「从哪找的」。

典型场景:从接口大响应里抠目标字段、验证数据结构假设、给写自动化测试的同学做取值表达式试验。解析与查询全部本地完成,数据零上传。

>_ 常见问题 · FAQ

Q1 · JSONPath 和 XPath 是什么关系?

XPath 是 XML 的查询语言(/bookstore/book/title),JSONPath 把同一思路搬到 JSON:$ 是根(对应 /)、. 取子节点、.. 递归下降、[?(...)] 条件过滤。会 XPath 的上手 JSONPath 几乎零成本,两者都是「用一条表达式精确定位数据」。

Q2 · 常用表达式怎么写?给几个例子。

高频五式:$.a.b 取固定路径;$.list[*].name 取数组每元素的某字段;$..name 不限深度找全部 name;$.list[0:3] 切片取前三条;$.list[?(@.age>18)] 条件过滤。组合起来可表达绝大多数取数需求,写完即见结果,试错成本极低。

Q3 · 过滤表达式里的 @ 是什么意思?

@ 代表当前被检查的元素:[?(@.price<10)] 读作「对数组里每个元素,检查它的 price 是否小于 10」。条件里可以比较字段、组合 &&/||、匹配字符串。把它理解成循环体内的 this,过滤语法就通了。

Q4 · 为什么我的表达式没匹配到?

按概率排查:① 根写错——表达式必须以 $ 开头;② 数组与对象的访问符混用(数组用 [],对象字段用 .);③ 字段名带特殊字符要用 ['字段名'] 形式;④ 条件里类型不符(字符串比较要加引号)。本工具输出匹配路径,从「部分命中」的表达式逐步调整,比从头猜快。

Q5 · JSONPath 的方言差异是怎么回事?

JSONPath 没有官方强制标准,各实现(Goessner 原版、Jayway、JSONPath Plus)在细节上互有出入:过滤器内函数支持、切片行为、不一致时的返回形态。本工具覆盖的是各方言交集部分的通用语法——用交集语法写的表达式在主流实现里行为一致,跨语言移植最稳。

嵌入代码

把下面的代码复制到你的网页,即可将本工具嵌入为 iframe(自动隐藏导航与页脚)。

高度px
此工具在你的浏览器本地运行,输入内容不会上传。按 Ctrl K 可随时切换到其他工具。