几个小时的阅读和尝试所有的我脑子里浮现的JSON路径表达式之后,两个逻辑表达式和无感表情,我仍然不知道我怎么能提取所有cmis:objectId
地方cmis:objectTypeId
等于F:cm:custom
从所有object
对象,无论嵌套深度:
{
{... [... 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"
}
Run Code Online (Sandbox Code Playgroud)
我尝试并从数百次尝试中节省下来的一些东西:
$.[*]..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
Run Code Online (Sandbox Code Playgroud)
注意:我使用的是http://www.jsonquerytool.com/,因为我使用的是JMeter插件“ JSON Path Extractor”,而此插件使用的是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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是查询。使用$..object..
它可以查找对象下任何位置的所有对象object
,然后仅按具有cmis:objectTypeId
属性的对象过滤它们:
$..object..[?(@['cmis:objectTypeId']=="F:cm:custom")].cmis:objectId
Run Code Online (Sandbox Code Playgroud)
这些是结果(我也使用http://www.jsonquerytool.com对其进行了测试):
[
"11111111-4563-4302-bba9-222222222222",
"39cdd896-4563-4302-bba9-398006572522"
]
Run Code Online (Sandbox Code Playgroud)
之类的东西$..succinctProperties[?(@['cmis:objectTypeId']=="F:cm:custom")]
什么都不返回的原因是因为JSON Path通常期望被过滤的实体(在这种情况下为succinctProperties)是一个对象数组。的@
是指该阵列中的一个对象。由于succinctProperties
不是数组,因此将对象的各个属性视为数组的一部分,因此cmis:objectTypeId
在succinctProperties
而不是succinctProperties
自身的每个属性上查找该属性。因此,仅当您具有如下结构时,它才会匹配:
{
"succinctProperties": {
"property": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "3333333-4563-4302-bba9-4444444444"
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3923 次 |
最近记录: |