2016-07-25 9 views
2

Ich kämpfe einige Werte aus einer JSON-Datei wie diese hier formatiert abzurufen:Abrufen von verschachtelten Arrays Werte mit JSON Java

{ 
    "search": { 
    "entry": [ 
     { 
     "found": "identity=9454532,l=big,ton=grand,k=molvi", 
     "attribute": [ 
      { 
      "name": "firstname", 
      "value": [ 
       "Lucas" 
      ] 
      }, 
      { 
      "name": "lastname", 
      "value": [ 
       "Brandon" 
      ] 
      } 
     ] 
     } 
    ], 
    "return": { 
     "code": 0, 
     "message": "Success", 
     "count": 1 
    } 
    } 
} 

Ich habe versucht, verschiedene Ansätze (json, Gson, jayway-JsonPath), aber ich es gelingt nicht, die Werte aus dem "attribute" -Array zu bekommen, nur die aus dem ersten Array. Ich weiß nicht, wie man angibt, dass "Attribut" ein JSONArray und kein JSONObject ist oder wie man den richtigen Pfad zu ihm festlegt. Dies ist der letzte Code, den ich mit dem spielte stoppt, wenn es eine Reihe gründet:

public void String nameObtain (String email) throws IOException{ 

String link = "http://jsonfile/" + email; 

    JSONObject json = readJsonFromUrl(link);   
    JSONObject rootObject = json.getJSONObject("search"); 
    JSONArray firstArray = rootObject.getJSONArray("entry"); 

for (int i = 0, size = firstArray.length(); i < size; i++) { 
    JSONObject objectInArray = firstArray.getJSONObject(i); 

    String[] elementNames = JSONObject.getNames(objectInArray); 
    System.out.printf("%d ELEMENTS IN CURRENT OBJECT:\n", elementNames.length); 
    for (String elementName : elementNames) { 
     String value = objectInArray.getString(elementName); 
     System.out.printf("name=%s, value=%s\n", elementName, value); 
    } 

} 

} 

Was Ich mag würde, ist zu tun, um die Werte Lucas oder Brandon zu bekommen. Jede Hilfe wird sehr geschätzt!

+0

Sie wollen also ein JSON-Array bekommen, verwenden aber 'getString'? Verwenden Sie einfach die einfache Methode "get", wenn Sie nicht angeben möchten, welchen Typ Sie erwarten. –

+0

Oder verwenden Sie "getJSONArray" für diejenigen, die Sie wissen, sind JSON-Arrays. –

+0

Können Sie Werte für das Array "entry" zurückholen? Wenn ja, dann sollte es ähnlich dem Array "attribute" sein. 'getJSONArray' Methode ist alles was Sie brauchen. Was immer daraus zurückkommt, kann als JSONObject behandelt und wiederholt werden. – Dadani

Antwort

4

Bibliotheken verwendet:

import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 

Überprüfen Sie den Code unten und weise Parsing Schritt

JSONObject search = (JSONObject) jsonObject.get("search");//1 
    JSONArray entry = (JSONArray) search.get("entry");//2 
    for (int i = 0; i < entry.size(); i++) { 
     JSONObject jsonObject1 = (JSONObject) entry.get(i);//3 
     JSONArray jsonarray1 = (JSONArray) jsonObject1.get("attribute");//4 
     for (int j = 0; j < jsonarray1.size(); j++) { 
      System.out.println(((JSONObject) jsonarray1.get(j)).get(
        "value").toString());//5 

     } 

    } 

Es wird die genannten Werte stufenweise geben:

1) { "Eintrag" : [{"gefunden": "identity = 9454532, l = groß, ton = großartig, k = molvi", "attribute": [{"name": "vorname", "wert": ["Lucas"]}, {"name": "Nachname", "Wert": ["Brandon"]}]}], "return": { "code": 0, "count": 1, "message": "Erfolg"}}

2) [{"gefunden": "identity = 9454532, l = groß, ton = grand, k = molvi" , "Attribut": [{"Name": "Vorname", "Wert": ["Lucas"]}, {"Name": "Nachname", "Wert": ["Brandon"]}}}]

3) {"gefunden": "identity = 9454532, l = groß, ton = großartig, k = molvi", "attribute": [{"name": "vorname", "wert": ["Lucas"] }, {"Name": "Nachname", "Wert": ["Brandon"]}]}

4) [{"name": "Vorname", "Wert": ["Lucas"]}, {"Name": "Nachname", "Wert": ["Brandon"]}]

5) ["Lucas"] und ["Brandon"]

Also im Grunde müssen Sie sich um JSONObject bzw. JSONArray kümmern und das Parsen entsprechend durchführen.

+0

Danke @Rishal, endlich etwas Licht !! –

Verwandte Themen