1. 为什么需要JSONPath?
第一次处理API返回的嵌套JSON数据时,我盯着屏幕上的几十层花括号和方括号发呆。手动写for循环一层层解析?光是想到要处理各种KeyError异常就头皮发麻。直到发现JSONPath这个神器,原来三行代码就能搞定的事情,我之前居然写了三十行。
JSONPath就像是给JSON数据配的GPS导航。想象你走进一个巨型图书馆(复杂的JSON结构),XPath相当于要你记住"第三排书架第二层左边第五本"这种具体位置,而JSONPath允许你说"帮我找所有科幻类书籍"($..books[?(@.category=='科幻')])。这种声明式的查询方式,让数据提取变得像问路一样自然。
去年处理电商平台API时遇到个典型场景:需要从订单数据中提取所有已付款但未发货的商品ID。原始数据包含用户信息、订单列表、商品详情等多层嵌套,手动解析要写大量循环和条件判断。改用JSONPath后,一行表达式$.orders[?(@.status=='paid' && !@.shipped)].items[*].id直接搞定,代码量减少80%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. JSONPath核心语法拆解
2.1 基础定位操作符
最常用的$符号代表JSON根节点,就像文件系统的根目录。比如有个用户数据:
json复制{
"user": {
"name": "张三",
"age": 28,
"contacts": {
"email": "zhang@example.com",
"phones": ["13800138000", "18612345678"]
}
}
}
$.user.name就像文件路径,直接定位到"张三"$.user.contacts.phones[1]获取第二个手机号(索引从0开始)$..email双点号表示递归搜索,不管email藏在多深的层级都能找到
实测中发现个坑:递归搜索虽然方便,但在大型JSON中性能损耗明显。有次处理10MB+的日志文件,$..timestamp导致查询慢了20倍。后来改用精确路径$.logs[*].timestamp,速度立刻恢复正常。
2.2 高级过滤技巧
过滤
