JSONPath平面结构无法对字符串进行筛选
将JSONPath与以下内容一起使用时JSONPath平面结构无法对字符串进行筛选,json,jsonpath,Json,Jsonpath,将JSONPath与以下内容一起使用时 { "tradeID": "12345", "version": "1" } 使用表达式$.tradeID[?(@=='12345')]不会返回任何内容 但是,使用$[?(@=='12345')]表达式可以正确解析 为什么??看起来筛选器表达式根本无法对tradeID进行操作,因为它是一个基叶?表达式$。tradeID[?(@='12345')]表示从根元素导航到子元素tradeID,并匹配筛选的值,以仅选择与'12345匹配的数组元素。
{
"tradeID": "12345",
"version": "1"
}
使用表达式$.tradeID[?(@=='12345')]
不会返回任何内容
但是,使用$[?(@=='12345')]
表达式可以正确解析
为什么??看起来筛选器表达式根本无法对tradeID进行操作,因为它是一个基叶?表达式
$。tradeID[?(@='12345')]
表示从根元素导航到子元素tradeID
,并匹配筛选的值,以仅选择与'12345
匹配的数组元素。由于tradeID
是一个简单的值,而不是输入中的数组,因此不匹配。如果tradeID
的值是一个数组,那么它将匹配
输入
JSONPath
输出
正如您所发现的,表达式$[?(@=='12345')]
确实匹配。此表达式表示从根元素导航到其任何子元素并选择值,将值过滤为仅选择'12345'
。但是,请注意,如果文档中有其他键映射到值'12345
,则它返回的值可能会超出您的预期
输入
JSONPath
输出
如果目标只是拉取tradeID
,则不需要过滤表达式
输入
JSONPath
输出
如果目标是通过多个文档数组中的tradeID
匹配特定文档,则可以选择顶级数组中的所有元素,并使用与所需tradeID
匹配的筛选表达式
输入
JSONPath
输出
{
"tradeID": [ "12345", "67890" ],
"version": "1"
}
$.tradeID[?(@ == '12345')]
[
"12345"
]
{
"tradeID": "12345",
"version": "1",
"otherID": "12345"
}
$[?(@ == '12345')]
[
"12345",
"12345"
]
{
"tradeID": "12345",
"version": "1",
"otherID": "12345"
}
$.tradeID
[
"12345"
]
[
{
"tradeID": "12345",
"version": "1"
},
{
"tradeID": "67890",
"version": "2"
}
]
$.[?(@.tradeID == '12345')]
[
{
"tradeID": "12345",
"version": "1"
}
]