排查嵌套JSON接口返回,我用JSONPath在线工具省了半天调试时间
📅 2026/7/3 17:44:12
👁️ 阅读次数
📝 编程学习
上周接了个需求,后端同事返回的JSON结构深得像俄罗斯套娃。我本地用console.log一层层展开,眼睛都花了,还是找不到想要的字段。后来换了个思路,用一个在线JSONPath工具直接定位,十几分钟就把问题解决了。下面把过程记下来,给同样被嵌套JSON折磨的同学参考。
先说我踩的坑
那个接口返回大概长这样(简化后):
{"code":200,"data":{"items":[{"id":1,"metadata":{"tags":[{"name":"java","score":0.9},{"name":"spring","score":0.8}]}}]}}我要做的是:把所有items里metadata.tags下score大于0.85的name取出来。
以前我的做法是用浏览器控制台写一长串?.链式调用,或者复制到IDE里用代码片段跑。结构一复杂,不是漏了括号就是层级对不上。最烦的是有些字段名字还不一样,比如另一个接口叫tag_list而不是tags,调试成本直接翻倍。
JSONPath到底怎么用
JSONPath的语法和XPath有点像,核心是用$表示根节点,.或[]取属性,*通配,..递归,[?(@...)]做过滤。
针对上面的例子,我要定位所有tags里的对象,可以这样写:
$.data.items[*].metadata.tags[*]如果要过滤score大于0.85的,加上过滤表达式:
$.data.items[*].metadata.tags[?(@.score > 0.85)].name把这段表达式丢进JSONPath在线工具,粘贴JSON,点一下查询,结果直接列出["java"],不需要再手动展开。
实际工作流
我现在处理这种嵌套JSON基本是三步:
- 把接口返回的JSON复制到在线JSONPath工具的左侧面板;
- 在右侧输入框里写表达式,边写边看匹配结果;
- 确认路径没错后,把表达式抄进业务代码里。
比我在控制台里反复折叠节点快得多。尤其是字段名不确定的时候,我会先用$..tags这种递归写法,看看JSON里到底哪些节点叫tags,再细化路径。
一些容易写错的点
[?(@.score > 0.85)]里,@代表当前节点,过滤条件要用括号包起来;- 数组索引从0开始,
[0]和[:3]这些切片语法大部分工具都支持; - 如果要取多个字段,可以用
['name', 'score']这种多选语法,不过不同实现支持程度不一样,建议先用单个字段验证。
写在最后
这种小工具我一般不会专门装插件,打开网页就能用是最省事的。最近我查这类在线小工具时,常去一个叫工具派(https://gjupai.com/)的站,上面的JSONPath查询工具支持表达式高亮、JSON树形可视化,还能点击节点自动生成路径,省了不少手敲表达式的时间。如果你也经常和嵌套JSON打交道,可以收藏一下,下次调试时试试看。
编程学习
技术分享
实战经验