jsonpath语法
Whisper Lv5

介绍:JSONPath 专门用于从 JSON 数据中提取指定内容,类比 XML 中的 XPath。


一、示例数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"code": 200,
"msg": "请求成功",
"data": {
"total": 2,
"users": [
{
"id": 1001,
"name": "张三",
"age": 28,
"gender": "男",
"address": {
"province": "北京",
"city": "北京市"
}
},
{
"id": 1002,
"name": "李四",
"age": 25,
"gender": "女",
"address": {
"province": "上海",
"city": "上海市"
}
}
]
}
}

二、JSONPath 核心语法详解

1. 基础选择器

JSONPath 语法 说明 示例 示例结果
$ 根节点(JSON 数据的最顶层,所有路径都从 $ 开始) $ 整个 JSON 数据
. 访问子节点(直接子级,层级之间用 . 分隔) $.code 200
.. 递归下降(访问所有层级的匹配节点,层级深度不限) $..name [“张三”, “李四”]
[] 访问数组元素(数组索引、筛选条件都放在 [] 中) $.data.users[0] id=1001的完整对象
* 通配符(匹配所有同级节点,可用于对象、数组) $.data.users[*].age [28, 25]
@ 筛选条件中引用当前节点(仅在 [] 内的过滤表达式中使用) $.data.users[?(@.age>26)] 年龄大于26的用户(仅张三对象)

2. 数组操作

JSON 数组是接口返回的常见格式,重点掌握以下操作:

(1)按索引取值

  • 数组索引从 0 开始
  • 支持负数索引(-1 表示最后一个元素,-2 表示倒数第二个,以此类推)
    示例:
1
2
3
$.data.users[1]  // 取第二个用户(李四)
$.data.users[-1] // 取最后一个用户(李四)
$.data.users[0].name // 取第一个用户的姓名(张三)

(2)数组切片

语法:[start:end:step]end 对应的元素不包含)
示例:

1
2
3
$.data.users[0:1]  // 取索引 0 到 1(不包含1),即第一个用户
$.data.users[0:2] // 取索引 0 到 2(不包含2),即所有两个用户
$.data.users[::1] // 步长为 1,取所有用户(等同于 [*])

(3)条件过滤(按属性值筛选数组元素)

语法:[?(@.属性名 操作符 数值/字符串)]
支持的操作符:

  • 比较操作符:==!=><>=<=
  • 逻辑操作符(多条件):&&(且)、||(或)
  • 存在性判断:@.属性名(判断当前节点是否包含该属性)

示例:

1
2
3
4
5
6
// 1. 筛选年龄大于26的用户
$.data.users[?(@.age>26)]
// 2. 筛选性别为"女"且id=1002的用户
$.data.users[?(@.gender=="女" && @.id==1002)]
// 3. 筛选包含"address"属性的用户(这里两个用户都包含,返回全部)
$.data.users[?(@.address)]

3. 其他常用

语法 说明 示例 结果
() 表达式分组(优先级控制,多条件时常用) `$..users[?((@.age>25)
['属性名'] 替代 . 访问子节点(适合属性名包含特殊字符,如空格、横杠) $['data']['users'][0]['name'] 张三(和 $.data.users[0].name 效果一致)