JsonPath表达式
JsonPath表达式
JsonPath是一种用于查询JSON文档的语言,其语法和用途类似于XPath在XML文档中的应用。JsonPath提供了一种简洁而强大的方式,用于从复杂的JSON结构中提取和定位所需的数据。以下是对JsonPath表达式的详细介绍。
基本语法
- 根元素:
使用符号$
表示JSON文档的根元素。例如,$
代表整个JSON文档。 - 对象属性:
使用.
符号来选择对象的属性。例如,$.name
表示JSON中名为name
的属性。 - 数组索引:
使用方括号[]
来表示数组索引。例如,$.students[0]
表示JSON中students
数组的第一个元素。需要注意的是,JsonPath的数组索引是从0开始的,这与XPath从1开始不同。 - 通配符:
使用*
表示匹配任意属性或元素。例如,$.students[*]
表示JSON中所有的students属性,而$.*
表示根元素下的所有属性。 - 多个路径表达式:
使用逗号,
表示多个路径表达式的组合。例如,$.students[0].name, $.students[1].age
表示JSON中第一个学生的姓名和第二个学生的年龄。 - 过滤表达式:
使用条件表达式来过滤结果。例如,$.students[?(@.age > 18)]
表示JSON中年龄大于18岁的学生。
示例解析
假设有以下JSON文件内容:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99,
"isbn": "0-553-21311-3"
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
- 提取第一个书的标题:
- 表达式:
$.store.book[0].title
- 结果:
"Sayings of the Century"
- 表达式:
- 提取所有书的作者:
- 表达式:
$.store.book[*].author
- 结果:
["Nigel Rees", "Evelyn Waugh"]
- 表达式:
- 提取价格大于10的书:
- 表达式:
$.store.book[?(@.price > 10)]
- 结果:
[{"category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99, "isbn": "0-553-21311-3"}]
- 表达式:
- 提取所有价格:
- 表达式:
$..price
- 结果:
[8.95, 12.99, 19.95]
- 表达式:
高级用法
- 范围表达式:
- 选择特定范围内的数组元素。例如,
$.store.book[0:2]
表示选择第一个到第二个(不包括第三个)元素。
- 选择特定范围内的数组元素。例如,
- 操作符和正则表达式:
- JsonPath支持使用操作符进行复杂的比较和运算。例如,
$.key[?(@.value > 10 && @.value < 20)]
选择值在10到20之间的元素。 - 还可以使用正则表达式进行匹配。例如,
$.key[?(@.name =~ /pattern/)]
选择name符合正则表达式pattern的元素。
- JsonPath支持使用操作符进行复杂的比较和运算。例如,