2015-04-22 28 views
1

從下面的JSON中,我試圖編寫一個Gpath,它只會在「類型」字段等於時返回「狀態」字段ride_state(即我只想要兩個「打開」狀態)Gpath當表達式爲真

[{ 
    "type": "day", 
    "data": { 
     "id": "7a46a975-5474-4278-a56f-4deadd9a276d", 
     "state": "closed" 
    } 
}, { 
    "type": "ride_state", 
    "data": { 
     "id": "13f3b625-b39e-4875-b29c-0173712b3c87", 
     "state": "open" 
    } 
}, { 
"type": "ride_state", 
    "data": { 
     "id": "b52b5081-e1df-42da-ba76-027c63205f8e", 
     "state": "open" 
    } 
}] 

我是新來的Groovy和GPATH,至今一直沒能找到一種方法來做到這一點,任何人都可以請幫助?

+0

請加你到目前爲止嘗試;即使不工作,它也顯示出實際效果,並且會使寫作解決方案變得更容易。 – cfrick

+0

這不是一個有效的json。 – dmahapatro

+0

對不起,原來的JSON要大得多,所以我把它的大部分都剪掉了,忘了最後的括號 – SaviourSoul

回答

0

有了一個有效的JSON,這可以按以下步驟進行:

def jsonString = """ 
[{ 
    "type": "day", 
    "data": { 
     "id": "7a46a975-5474-4278-a56f-4deadd9a276d", 
     "state": "closed" 
    } 
}, { 
    "type": "ride_state", 
    "data": { 
     "id": "13f3b625-b39e-4875-b29c-0173712b3c87", 
     "state": "open" 
    } 
}, { 
    "type": "ride_state", 
    "data": { 
     "id": "b52b5081-e1df-42da-ba76-027c63205f8e", 
     "state": "open" 
    } 
}] 
""" 

assert new groovy.json.JsonSlurper() 
         .parseText(jsonString) 
         .findResults {it.type == 'ride_state' ? it.data.state : null} == 
         ['open', 'open'] 
+0

非常有幫助,非常感謝 – SaviourSoul