2017-01-22 201 views
1

我要驗證以下JSON:過濾兒童嵌套JsonPath

{ 
    "data": { 
    "children": [{ 
     "nodes": [{ 
      "key": "STATE", 
      "value": "Alaska" 
     }], 
     "children": [{ 
      "nodes": [{ 
       "key": "STATE", 
       "value": "Alaska" 
      }, { 
       "key": "NAME", 
       "value": "Jack" 
      }, { 
       "key": "AGE", 
       "value": "13" 
      }] 
     }, { 
      "nodes": [{ 
       "key": "STATE", 
       "value": "Alaska" 
      }, { 
       "key": "NAME", 
       "value": "Jill" 
      }, { 
       "key": "AGE", 
       "value": "23" 
      }] 
     }] 
    }, { 
     "nodes": [{ 
      "key": "STATE", 
      "value": "Texas" 
     }], 
     "children": [{ 
      "nodes": [{ 
       "key": "STATE", 
       "value": "Texas" 
      }, { 
       "key": "NAME", 
       "value": "John" 
      }, { 
       "key": "AGE", 
       "value": "23" 
      }] 
     }] 
    }] 
    } 
} 

有在JSON兩個嵌套表第一種是「國家」分組,它包含持有名稱的值的孩子名單。 我只需要找到分組爲「阿拉斯加」的名稱。 我曾嘗試以下JsonPath但是,它返回null:

$.data..children[?(@nodes.value == 'Alaska')].children[?(@nodes.key=='NAME').value 

我還沒有試過GPATH(的findAll),但是,如果它是一個更好的解決方案,請大家指教。

在此先感謝。

回答

2

你可以用內置的Groovy JsonSlurper做...假設你的JSON是在變量jsonTxt一個字符串,你可以做:

import groovy.json.* 

def names = new JsonSlurper().parseText(jsonTxt) 
          .data 
          .children 
          .find { 'Alaska' in it.nodes.value } 
          .children 
          .nodes 
          .flatten() 
          .findAll { it.key == 'NAME' } 
          .value 

assert names == ['Jack', 'Jill'] 
+0

我進口GPATH庫,並創造了奇蹟!謝謝 – Dighate