2016-03-23 7 views
0

ich ein JSON-Objekt haben, wie folgt:Finden JSON Geschwister ohne Eltern mit JsonNode in java

[ 
    { 
     "name":"thisIsAName", 
     "id":1 
    }, 
    { 
     "name":"anotherName", 
     "id":2 
    }, 
    { 
     "name":"anotherName2", 
     "id":3 
    } 
] 

und ich versuche, die ID zu finden, auf den Namen basiert. Wie navigierst du zum Geschwister, wenn es kein Elternteil gibt? Ich erhalte die JSON von einer Client-Antwort Jersey:

Response responseObject = client.getAllObjects(); 
JsonNode responseAsNode = responseObject.readEntity(JsonNode.class); 

Wenn ich nach dem Namen: responseAsNode.findValue("name");, dann gibt es mir richtig ein List<JsonNode>, die jedes Namenselement enthält, so kann ich, dass für den einen suchen, die übereinstimmt meine erwartet, aber es gibt nur eine Liste von JsonNodes "name":"value", zurück.

for (JsonNode node : responseAsNode.findValues("name")){ 
    if (node.textValue().equals("ftp-" + DEFAULT_ENV.toLowerCase())) { 
     //Now, find my id and do something with it. 

     break; 
    } 
} 

Wenn ich node.getParent() anrufe, bekomme ich eine Ausnahme, da es keine Eltern ist. Anders als die Entwickler bitten, "list": an der Front des Json hinzuzufügen, was soll ich versuchen?

+1

Ermitteln Sie Ihre Position im Array mit i in Ihrer for-Schleife. Sie können dann die ID mit responseAsNode.get (i) .get ("id") erhalten –

+0

Es ist so einfach, ich fühle mich dumm für das Vermissen. –

Antwort

2

Navigieren Sie durch den JSON-Baum und versuchen Sie, jedes Element abzugleichen.

String toFind = "anotherName"; 

Iterator<JsonNode> iter = responseAsNode.elements(); 

while (iter.hasNext()) 
{ 
    JsonNode node = iter.next(); 

    JsonNode name = node.get("name"); 

    if (toFind.equals(name.asText())) 
    { 
     System.out.println(node.get("id").asLong()); 
    } 

} 

Dies wird 2 drucken.

+0

Super! Das würde auch funktionieren. Mann, ich starre lange genug auf etwas, und ich kann nicht über meine Nase hinweg sehen. Danke, @Starf. –

+0

@RyanCox Sei nicht zu hart zu dir selbst, wir waren alle dort. – starf