2016-11-01 7 views
0

Ich benutze Jackson, um einige JSON zu analysieren. Ein Ausschnitt aus diesem json ist wie folgt:Get Feldname von JsonNode

}, 
"1/1/0": { 
    "event": "status", 
    "name": "Alarm Status", 
    "type": "Alarm", 
    "location": "Hall" 
}, 
"1/1/1": { 
    "event": "status", 
    "name": "Smoke Alarm Status", 
    "type": "Alarm", 
    "location": "Hall" 
}, 

ich gerne die Daten für jedes ‚Objekt‘ zu extrahieren geschafft haben, aber ich bin kämpfen, um den ‚name‘ für jedes Objekt zu erhalten. Im obigen Beispiel wäre dies "1/1/0" und "1/1/1". Ich tue dies auf folgende Weise:

final JsonNode node = parser.parseToNode(configJson); 
final JsonNode sensorsChild = node.get("sensors"); 

    for (JsonNode root : sensorsChild) { 
        final String event = root.get("event").asText(); 
        final String name = root.get("name").asText(); 
        final String type = root.get("type").asText(); 
        final String location = root.get("location").asText(); 
    } 

möchte ich eine weitere Zeile in der die for-Schleife, die wie etwas ist:

final String id = root.getNodeFieldName(); 

die '1/1/0' ergeben würde und ‚1/1/1 'jeweils. Danke

+0

können Sie Ihren kompletten JSON posten? –

+0

@DerickDaniel kann ich leider nicht, da es 1000s Zeilen lang ist, aber das Snippet sollte einen guten Hinweis darauf geben, womit ich es zu tun habe. – Joe

+0

Hilft das? http://stackoverflow.com/questions/7653813/jackson-json-get-node-name-from-json-tree – Tomalak

Antwort

1

Sie können so etwas tun, über den Wurzelknoten iterieren, um die erforderlichen Schlüsselfelder ('1/1/0' und '1/1/1') und Daten für jedes Objekt durch die verschachtelte while-Schleife bzw. for-Schleife zu erhalten.

final JsonNode node = parser.parseToNode(configJson); 

for (JsonNode root : node) { 

      Iterator<String> itr = root.getFieldNames(); 
       while (itr.hasNext()) { //to get the key fields 
       String key_field = itr.next(); 
       } 

      for (JsonNode n : node.get("sensors")) { //to get each object 
       final String event = root.get("event").asText(); 
       final String name = root.get("name").asText(); 
       final String type = root.get("type").asText(); 
       final String location = root.get("location").asText(); 
       } 
    } 

Es wäre einfacher, wenn Sie eine pojo Klasse mit Ihren json kartiert haben diese Vorgänge auszuführen, wenn Sie jackson-Bibliothek verwenden.