2017-01-22 2 views
1

Ich habe folgende JSON zu überprüfen:Filtering Kinder in einem verschachtelten 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" 
      }] 
     }] 
    }] 
    } 
} 

Es gibt zwei verschachtelte Listen im JSON zuerst von „STATE“ gruppiert und es enthält eine Liste Kinder, die Werte der Namen halten. Ich muss nur die Namen finden, die als 'Alaska' gruppiert sind. ich habe folgende JsonPath versucht, aber es gibt null zurück:

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

Ich habe nicht versucht GPath (findAll), aber, wenn es eine bessere Lösung ist, bitte zu beraten.

Vielen Dank im Voraus.

Antwort

2

Sie es mit dem eingebauten Groovy JsonSlurper tun könnte ... Ihr json Unter der Annahme, eine Zeichenfolge in der Variablen jsonTxt ist, können Sie einfach:

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

Ich importierte Gpath Bibliothek und hat Wunder gewirkt! Vielen Dank – Dighate

Verwandte Themen