🏠 首页 › 攻略 › JSON Path 5个实战场景,接口调试点就通

JSON Path 5个实战场景,接口调试点就通

接口返回嵌套五层JSON,想取某个字段值?教你5个JSON Path实战场景:接口调试、数据清洗、测试断言、日志提取、ETL迁移,配上在线工具直接粘贴就能查,不用写一行代码。

你有没有被嵌套JSON折磨过?

上次抓了个电商订单接口,返回数据套了五层。领导要"所有金额超100的商品名",手动翻到眼花。

后来用JSON Path写一行:$.orders[?(@.amount > 100)].productName,三秒出结果。

JSON Path 不是 XML 的 XPath,专门用来定位 JSON 里的字段。今天讲5个真实场景,每个都配好表达式,直接抄。

场景一:接口调试,快速定位字段

后端改了接口,返回结构变了一版。你要确认 data.users 里每个用户的 profile.name 还在不在。

表达式:$.data.users[*].profile.name

把接口返回贴进工具,跑一遍就知道。

navbox 上有在线 JSON Path 查询工具,粘贴 JSON、输入表达式,结果即时显示。不用起本地环境,比 F12 一层层展开快多了。

场景二:数据清洗,批量抽字段

爬了300个商品页,存成 JSON 数组。你现在只要价格和库存两个字段。

表达式:$.products[*].price,再写一遍 $.products[*].stock。

两个结果分别导出,直接拼表。比写 Python 脚本解析省事,数据量在几千条以内都够用。

场景三:测试断言,先验证再写脚本

写自动化测试前,先手动验证一下断言路径对不对。

比如要断言"第一条订单的收货人姓名是张三"。

表达式:$.orders[0].receiver.name

先在线工具里确认能匹配到,再写进测试代码。避免脚本跑起来才发现路径写错,省你反复调试的时间。

场景四:日志提取,秒级找到关键行

服务打出来的结构化日志,一条几千行 JSON。你要找所有状态码为500的请求。

表达式:$.logs[?(@.statusCode == 500)]

配合时间戳过滤:$.logs[?(@.statusCode == 500 && @.timestamp > 1700000000)]

排障时特别好用,比 grep 精准,比读日志快。

场景五:ETL 迁移,旧系统抽数据

从老系统的 JSON 存档里把用户信息抽出来,导入新数据库。

写三个表达式分别提取:

$.users[*].id
$.users[*].email  
$.users[*].createdAt

三列数据对齐,生成 CSV 直接导入。

关键技巧:多条表达式提取时,保证数组长度一致,否则错位。在线工具能帮你验证长度是否对得上。

常用表达式速查

需求表达式
取某个字段$.users[0].name
取所有某字段$.users[*].name
条件过滤$.users[?(@.age > 18)]
深度搜索..email(不管嵌套多深)
取前3条$.items[0:3]
多条件$.orders[?(@.amount > 100 && @.status == "paid")]

几个坑提前说

[] 里的下标从0开始,不是1。初学时最常见的错。

过滤条件里 @ 代表当前元素,写 $.users[?(@.age > 18)],@.age 指每个用户的 age 字段。

字符串要加引号,@.status == "paid" 不能写成 @.status == paid。

嵌套太深就换 ..,..fieldName 会从根节点开始递归搜索,不用写完整路径。

动手试一下

找一份你今天接触过的 JSON 数据,写个表达式试着提取。

在线工具粘贴跑一遍,三秒看结果。

你上次定位嵌套字段,用了多久?