JsonPath
前言
Github:https://github.com/HealerJean
一、为什么要用 JsonPath
在阅读长长的
JSON
的过程中,最常遇到的需求是想要提取某一个字段的值,或者遍历数组的元素对象值,而这些,都埋在了深深的JSON
长河中。 为了获取,最先想到的方式是,通过编程来获取想要的字段,假设有如下结构的 ` JSON`:
二、使用 JsonPath
JSON Path 是一种用于在 JSON 数据中定位和提取特定元素的表达式语言,提供了一种简洁的语法,使得从复杂的 JSON 结构中提取数据变得容易。
http://www.e123456.com/aaaphp/online/jsonpath/?
http://www.atoolbox.net/Tool.php?Id=792
https://jsonpath.com/
1、语法说明
语法 | 说明 |
---|---|
$ |
根节点,表示 JSON 数据的最外层。 |
. |
子节点操作符,用于访问对象中的属性。 |
[] |
索引操作符,用于访问数组中的元素或通过条件筛选元素。 |
* |
通配符,用于匹配任意属性名或数组索引。 |
.. |
递归下降符号,用于搜索嵌套结构中的所有层级 |
@ |
当前节点,可以用于在筛选条件中引用当前节点。 |
2、样例
{
"human": {
"person": {
"man": [
{
"name": "Jack",
"age": "17"
},
{
"name": "Mike",
"age": "32"
},
{
"name": "John",
"age": "23"
},
{
"name": "David",
"age": "41"
},
{
"name": "Eric",
"age": "29"
},
{
"name": "Chris",
"age": "38"
},
{
"name": "Tom",
"age": "27"
},
{
"name": "Peter",
"age": "35"
},
{
"name": "Robert",
"age": "26"
},
{
"name": "Daniel",
"age": "33"
}
]
}
}
}
1)获取某个字段
$.human.person
2)获取所有值
$.human..name
3)获取数组中某几个
a、某几个
$.human.person.man[0,1,2]
b、某个区间
$.human.person.man[0:2]
c、某几个个属性
$.human.person.man.[name,age]
4)条件判断
⬤
()
:表达式,用于进行条件判断或进行逻辑操作。可以在括号内使用比较运算符(如>
,<
,==
等)和逻辑运算符(如&&
,||
)来定义条件。例如,(@.length)
表示获取数组中的最后一个元素。(
@
表示当前元素,.length
表示当前元素的长度,(@.length-1)
就能够表示获取数组最后一个元素。)⬤
?()
:过滤表达式。在?()
中,可以使用任意合法的 JavaScript 表达式来对元素进行筛选。这样的表达式在过滤器内部被计算,并根据其结果决定是否选择或排除当前元素。例如,[?(@.age > 25)]
表示根据元素的 “age” 属性筛选出年龄大于 25 的元素。
样例1:
$..man[(@.length-10)]
样例2:
$..man[?(@.age>30)]
样例3:
$.human.person.man.[?(@.name='Jack')]