2015-09-08 44 views
1

經過幾個小時的閱讀和嘗試所有JSON路徑表達式進入我的腦海,無論是邏輯表達式和無意義表達式,我仍然不知道如何提取所有cmis:objectId其中cmis:objectTypeId從所有object對象等於F:cm:custom無論嵌套深度:JSONPath - 獲取對象其他值等於字符串的所有值

{ 

    {... [... 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/,因爲我用的是JMeter的插件「JSON路徑抽出」,這一插件使用http://goessner.net/articles/JsonPath/

+0

沒有人誰可以幫我:如果你有這樣的結構,它會因此只匹配的東西嗎?請:( – Pali

回答

4

我不是從你的問題不確定是否需要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")]之類的東西沒有返回任何內容的原因是因爲JSON路徑通常期望被過濾的實體(在本例中爲succinctProperties)是一個對象數組。 @引用數組中的一個對象。由於succinctProperties不是數組,因此它將對象的各個屬性視爲數組的一部分,因此會在succinctProperties的每個屬性上查找cmis:objectTypeId屬性,而不是在succinctProperties本身上查找。

{ 
    "succinctProperties": { 
     "property": { 
      "cmis:objectTypeId": "F:cm:custom", 
      "cmis:objectId": "3333333-4563-4302-bba9-4444444444" 
     } 
    } 
} 
+0

是的'cmis:objectId'和'cmis:objectTypeId'總是在'succinctProperties'對象下,但是父結構不同,有時它是'$。[*] .object.succinctProperties',有時它是'$ .data。[*] .object.succinctProperties'有時是'$。[*] .object.object.succinctProperties',但無論如何我現在明白了JSONPath如何過濾對象和數組的不同網絡。非常感謝,我沒有在任何地方閱讀此類信息,以便再次感謝您! – Pali

相關問題