Json Path:处理文件的好帮手
Json Path介绍
son Path和JSON文档有关系,正如XPath之于XML文档一样,JsonPath为Json文档提供了解析能力,通过使用JsonPath,你可以方便的查找节点、获取想要的数据,JsonPath是Json版的XPath
Json Path语法
JsonPath的语法相对简单,它采用开发语言友好的表达式形式
符号 | 描述 |
---|---|
$ | 查询根节点对象,用于表示json数据,可以使数组或对象 |
@ | 过滤器断言处理的当前节点对象 |
* | 通配符,可以表示一个名字或数字 |
.. | 递归搜索 |
. |
表示一个子节点 |
[‘ |
表示一个或多个子节点 |
[ |
表示一个人或多个数组下标 |
[start:end] | 数组片段、区间,顾头不顾尾 |
[?( |
过滤器表达式 |
函数
可以在JsonPath表达式执行后进行调用,其输入值为表达式的结果
名称 | 描述 | 输出 |
---|---|---|
min() | 获取数值类型数组的最小值 | Double |
max() | 获取数值类型数组的最大值 | Double |
avg() | 获取数值类型数组的平均值 | Double |
stddev() | 获取数值类型数组的标准差 | Double |
length() | 获取数值类型数组的长度 | integer |
过滤器
过滤器是用于过滤数组的逻辑表达式,一个通常的表达式形如:[?(@.age > 18)],可以通过逻辑表达式&&或||组合多个过滤器表达式,例如[?(@.price < 10 && @.category == ‘fiction’)],字符串必须用单引号包围,例如[?(@.color == ‘blue’)]。
操作符 | 描述 |
---|---|
!= | 不等于符号 |
== | 等于符号,但数字1不等于字符1 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
=~ | 判断是否符合正则表达式 |
in | 所属符号 |
nin | 排除符号 |
size | size of left (array or string) should match right |
empty | 判空符号 |
案例
{ "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
},
{ "category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{ "category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
XPath | JSONPath | 结果 |
---|---|---|
/store/book/author |
$.store.book[*].author |
书点所有书的作者 |
//author |
$..author |
所有的作者 |
/store/* |
$.store.* |
store的所有元素。所有的bookst和bicycle |
/store//price |
$.store..price |
store里面所有东西的price |
//book[3] |
$..book[2] |
第三个书 |
//book[last()] |
$..book[(@.length-1)] |
最后一本书 |
//book[position()<3] |
$..book[0,1]``$..book[:2] |
前面的两本书。 |
//book[isbn] |
$..book[?(@.isbn)] |
过滤出所有的包含isbn的书。 |
//book[price<10] |
$..book[?(@.price<10)] |
过滤出价格低于10的书。 |
//* |
$..* |
所有元素。 |