JSONPath - 获取对象其他值等于字符串的所有值
JSONPath - get all values where object othervalue equals string
经过几个小时的阅读和尝试所有出现在我脑海中的 JSON 路径表达式,包括逻辑表达式和无意义表达式,我仍然不知道如何提取所有 cmis:objectId
其中 cmis:objectTypeId
等于来自所有 object
个对象的 F:cm:custom
,无论嵌套深度如何:
{
{... [... nested objects and arrays as needed for a tree strucutre
object : {
"succinctProperties": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "39cdd896-4563-4302-bba9-398006572522",
...
}
},
}... }... close nested objects and arrays as needed for a tree strucutre
"id": "e244881e-e96b-406b-8d1f-faecae35d7f2"
}
我百次尝试并保存下来的一些东西:
$.[*]..succinctProperties[?(@['cmis:objectTypeId']=='F:wim:caseEntries')].cmis:objectId
$.[*]..succinctProperties.cmis:objectId // Returns ALL without condition
$.[*].*..succinctProperties[?(@.['cmis:objectTypeId']=='F:wim:caseEntries')]
$.[*]..succinctProperties[@.cmis:objectTypeId=='F:wim:caseEntries')].cmis:objectId
注意:我正在使用 http://www.jsonquerytool.com/ because I use the JMeter Plugin "JSON Path Extractor" and this plugin uses http://goessner.net/articles/JsonPath/
根据你的问题,我不确定你是否需要 cmis:objectTypeId
也始终直接位于 succinctProperties
对象下方,或者它是否只需要位于 object
对象下方的某个位置。如果是后者,我相信我可以解决您的问题。对于前者,我相信您可能已经达到了 JSON Path 的极限。
我已经使用这个示例 JSON 来测试查询:
{
"anotherobject": {
"object" : {
"someothernesting": {
"succinctProperties": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "39cdd896-4563-4302-bba9-398006572522"
}
}
}
},
"object" : {
"succinctProperties": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "11111111-4563-4302-bba9-222222222222"
}
},
"noobject": {
"succinctProperties": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "3333333-4563-4302-bba9-4444444444"
}
}
}
这是查询。使用 $..object..
它会查找 object
对象下任意位置的所有对象,然后仅通过具有 cmis:objectTypeId
属性:
的对象过滤它们
$..object..[?(@['cmis:objectTypeId']=="F:cm:custom")].cmis:objectId
结果如下(我也用http://www.jsonquerytool.com测试过):
[
"11111111-4563-4302-bba9-222222222222",
"39cdd896-4563-4302-bba9-398006572522"
]
$..succinctProperties[?(@['cmis:objectTypeId']=="F:cm:custom")]
returns nothing 之类的原因是因为 JSON Path 通常期望被过滤的实体(在本例中为 succinctProperties)是一个对象数组。 @
指的是数组中的一个对象。由于 succinctProperties
不是数组,它将对象的各个属性视为数组的一部分,因此在 [=15= 的每个 属性 上查找 cmis:objectTypeId
属性 ] 而不是 succinctProperties
本身。因此,它只会匹配具有如下结构的内容:
{
"succinctProperties": {
"property": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "3333333-4563-4302-bba9-4444444444"
}
}
}
经过几个小时的阅读和尝试所有出现在我脑海中的 JSON 路径表达式,包括逻辑表达式和无意义表达式,我仍然不知道如何提取所有 cmis:objectId
其中 cmis:objectTypeId
等于来自所有 object
个对象的 F:cm:custom
,无论嵌套深度如何:
{
{... [... nested objects and arrays as needed for a tree strucutre
object : {
"succinctProperties": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "39cdd896-4563-4302-bba9-398006572522",
...
}
},
}... }... close nested objects and arrays as needed for a tree strucutre
"id": "e244881e-e96b-406b-8d1f-faecae35d7f2"
}
我百次尝试并保存下来的一些东西:
$.[*]..succinctProperties[?(@['cmis:objectTypeId']=='F:wim:caseEntries')].cmis:objectId
$.[*]..succinctProperties.cmis:objectId // Returns ALL without condition
$.[*].*..succinctProperties[?(@.['cmis:objectTypeId']=='F:wim:caseEntries')]
$.[*]..succinctProperties[@.cmis:objectTypeId=='F:wim:caseEntries')].cmis:objectId
注意:我正在使用 http://www.jsonquerytool.com/ because I use the JMeter Plugin "JSON Path Extractor" and this plugin uses http://goessner.net/articles/JsonPath/
根据你的问题,我不确定你是否需要 cmis:objectTypeId
也始终直接位于 succinctProperties
对象下方,或者它是否只需要位于 object
对象下方的某个位置。如果是后者,我相信我可以解决您的问题。对于前者,我相信您可能已经达到了 JSON Path 的极限。
我已经使用这个示例 JSON 来测试查询:
{
"anotherobject": {
"object" : {
"someothernesting": {
"succinctProperties": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "39cdd896-4563-4302-bba9-398006572522"
}
}
}
},
"object" : {
"succinctProperties": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "11111111-4563-4302-bba9-222222222222"
}
},
"noobject": {
"succinctProperties": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "3333333-4563-4302-bba9-4444444444"
}
}
}
这是查询。使用 $..object..
它会查找 object
对象下任意位置的所有对象,然后仅通过具有 cmis:objectTypeId
属性:
$..object..[?(@['cmis:objectTypeId']=="F:cm:custom")].cmis:objectId
结果如下(我也用http://www.jsonquerytool.com测试过):
[
"11111111-4563-4302-bba9-222222222222",
"39cdd896-4563-4302-bba9-398006572522"
]
$..succinctProperties[?(@['cmis:objectTypeId']=="F:cm:custom")]
returns nothing 之类的原因是因为 JSON Path 通常期望被过滤的实体(在本例中为 succinctProperties)是一个对象数组。 @
指的是数组中的一个对象。由于 succinctProperties
不是数组,它将对象的各个属性视为数组的一部分,因此在 [=15= 的每个 属性 上查找 cmis:objectTypeId
属性 ] 而不是 succinctProperties
本身。因此,它只会匹配具有如下结构的内容:
{
"succinctProperties": {
"property": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "3333333-4563-4302-bba9-4444444444"
}
}
}