JSONPath 是什么?它和 XPath 有什么关系?
JSONPath 是一种用于选取 JSON 结构部分的路径表达式语法,由 Stefan Goessner 在 goessner.net 上提出。它的设计目标很直接:让 JSON 寻址像 XPath 处理 XML 一样自然。JSONPath 借鉴了 XPath 1.0 的思路,但只覆盖其核心部分,并基于 C 语言家族的特性来设计表达式。如果你需要在嵌套 JSON 中定位某个字段或一组节点,JSONPath 就是为此准备的轻量方案。
JSONPath 解决什么问题
JSON 结构本身用 C 家族语言处理并不困难,但缺少一种通用的、声明式的寻址方式。XPath 在 XML 世界里承担了这个角色,JSON 却没有对应物。JSONPath 填补的正是这个空白:用一条路径表达式,从任意 JSON 结构中选出想要的部分。
和 XPath 的对应关系
JSONPath 常被理解为“XPath for JSON”,两者的表达式形式高度相似。以 goessner.net 给出的例子为例:
| 用途 | JSONPath | XPath |
|---|---|---|
| 选取某本书的标题 | $..book[2].title |
//book[3]/title |
可以看到,JSONPath 用 $ 表示根,用 .. 表示递归下降,用 [n] 表示数组下标,整体结构和 XPath 的 //、[n] 一一对应。区别在于 JSONPath 只保留 XPath 1.0 的核心能力,不追求完整覆盖。
语法元素与实现
据 goessner.net 介绍,JSONPath 由一小组共九个语法元素构成,足以组合出复杂的路径表达式。它同时提供了轻量实现:
jsonpath.js:面向客户端,在浏览器中访问 JSON 结构jsonpath.php:面向服务端
这两个文件可以免费下载。此外,Atif Aziz 在很短时间内贡献了 C# 移植版 jsonpath.cs。
谁适合用它
如果你在做前端或 PHP 项目,需要从深层嵌套的 JSON 中提取数据,又不想写一堆循环和条件判断,JSONPath 是一个直接可用的选择。它语法简洁、实现轻量,且与 XPath 的心智模型一致,熟悉 XPath 的人几乎可以立刻上手。