2016-04-20 20 views
-6

Ich würde Hilfe benötigen, um dieses JSONArray in meiner Android App zu analysieren. Ich bin ein wenig verwirrt mit JSONObjects und JSONArrays:Android: parse ein JSONArray

[ 
{ 
    "nid": [ 
     { 
      "value": "3" 
     } 
    ], 

    "uid": [ 
     { 
      "target_id": "1", 
      "url": "/user/1" 
     } 
    ], 

    "field_image": [ 
     { 
      "target_id": "2", 
      "alt": "alternate 1", 
      "title": "", 
      "width": "640", 
      "height": "640", 
      "url": "http://url" 
     }, 
     { 
      "target_id": "3", 
      "alt": "alternate 2", 
      "title": "", 
      "width": "640", 
      "height": "640", 
      "url": "http://url" 
     } 
    ] 
}] 

Hier ist, was ich habe, die Iteration zu starten:

public void onResponse(JSONArray response) { 
try { 
    jsonResponse = ""; 
    for (int i = 0; i < response.length(); i++) {  
    ... 
+0

Verwenden Sie einfach org.json-Paket. Es verfügt über Methoden, mit denen Sie den JSON direkt analysieren können, ohne diese Art von Schleifenlogik explizit schreiben zu müssen. – SoulRayder

+0

Welche Daten müssen Sie von Json bekommen ?? dritte ein Array? –

+0

Ich empfehle Ihnen, GSON für JSON-Parsing zu verwenden. – RBK

Antwort

1

Hier ist der Code, um Daten zu analysieren,

private void parseData(){ 
     try { 
      JSONArray jsonArray=new JSONArray(response); 
      JSONObject jsonObject=jsonArray.getJSONObject(0); 
      JSONArray jsonArrayNid=jsonObject.getJSONArray("nid"); 
      JSONArray jsonArrayUid=jsonObject.getJSONArray("uid"); 
      JSONArray jsonArrayField_image=jsonObject.getJSONArray("field_image"); 
      for(int i=0;i<jsonArrayNid.length();i++){ 
       JSONObject jsonObjectNid=jsonArrayNid.getJSONObject(i); 
       String value=jsonObjectNid.getString("value"); //here you get your nid value 
      } 
      for(int i=0;i<jsonArrayUid.length();i++){ 
       JSONObject jsonObjectUid=jsonArrayUid.getJSONObject(i); 
       String target_id=jsonObjectUid.getString("target_id"); //here you get your uid target_id value 
       String url=jsonObjectUid.getString("url"); //here you get your uid url value 
      } 
      for(int i=0;i<jsonArrayField_image.length();i++){ 
       JSONObject jsonObjectFieldImage=jsonArrayField_image.getJSONObject(i); 
       String target_id=jsonObjectFieldImage.getString("target_id"); 
       String alt=jsonObjectFieldImage.getString("alt"); 
       String title=jsonObjectFieldImage.getString("title"); 
       String width=jsonObjectFieldImage.getString("width"); 
       String height=jsonObjectFieldImage.getString("height"); 
       String url=jsonObjectFieldImage.getString("url"); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    } 
+0

diese Zeile nicht funktioniert: JSONArray jsonArrayField_image = jsonObject.getJSONArray ("field_image") –

+0

Sie erhalten einen Fehler, wenn ja, dann hier, ich denke, geben Sie Zeile ist korrekt –

+0

Sorry, es war mein Fehler –

1

Versuchen Sie, so zu analysieren.

In diesem Code ist jsonArray das übergeordnete Array, das Sie in Ihrem JSON haben.

for(int i=0;i<jsonArray.length();i++) 
{ 
    try { 
      JSONObject object=jsonArray.getJSONObject(i); 
      JSONArray imageArray=object.getJSONArray("field_image"); 
      for(int j=0;j<imageArray.length();j++) 
      { 
       JSONObject imageObject=imageArray.getJSONObject(j); 
       String targetId=imageObject.getString("target_id"); 
      } 
     } 
    catch (JSONException e) { 
       e.printStackTrace(); 
      } 
} 
1
for (int i = 0; i < response.length(); i++) { 

JSONObject tobject = response.getJSONObject(i); 



    JSONArray nid = tobject.getJSONArray("nid"); 
    JSONArray uid= tobject.getJSONArray("uid"); 
    JSONArray field_image= tobject.getJSONArray("field_image"); 

    //similarly you can loop inner jsonarrays 

} 
0

Versuchen

public void onResponse(JSONArray response) { 
    try { 
     if (response != null) { 

      for (int i = 0; i < response.length(); i++) { 

       JSONObject jsonObject = resultsArray.getAsJsonObject(i); 

       //get nid array 
       JSONArray nidJSONArray = jsonObject.getJSONArray("nid"); 

       //get uid array 
       JSONArray uidJSONArray = jsonObject.getJSONArray("uid"); 

       //get field_image array 
       JSONArray fieldImageJSONArray = jsonObject.getJSONArray("field_image"); 

       //parse nid array 
       if (nidJSONArray != null) { 
        for (int i = 0; i < nidJSONArray.length(); i++) { 
         JSONObject jsonObject = nidJSONArray.getAsJsonObject(i); 
         String value = jsonObject.getString("value"); 
        } 
       } 


       //parse uid array 
       if (uidJSONArray != null) { 
        for (int i = 0; i < uidJSONArray.length(); i++) { 
         JSONObject jsonObject = uidJSONArray.getAsJsonObject(i); 
         String targetId = jsonObject.getString("target_id"); 
         String url = jsonObject.getString("url"); 
        } 
       } 


       //parse field_image array 
       if (fieldImageJSONArray != null) { 
        for (int i = 0; i < fieldImageJSONArray.length(); i++) { 
         JSONObject jsonObject = fieldImageJSONArray.getAsJsonObject(i); 
         String targetId = jsonObject.getString("target_id"); 
         String alt = jsonObject.getString("alt"); 
         String title = jsonObject.getString("title"); 
         String width = jsonObject.getString("width"); 
         String height = jsonObject.getString("height"); 
         String url = jsonObject.getString("url"); 
        } 
       } 
      } 
     } 

    } catch(Exception e) { 
     Log.e("Error", e.getMessage()); 
    } 

} 
1

Benutzen Sie den Code nach Ihnen:

JSONArray array = null; 
    try { 
     array = new JSONArray(url); // your web url 
     JSONObject object = array.getJSONObject(0); 
     JSONArray array1 = object.getJSONArray("nid"); 
     JSONObject object1 = array1.getJSONObject(0); 
     String value = object1.getString("value"); 

     JSONArray array2 = object.getJSONArray("uid"); 
     JSONObject object2 = array2.getJSONObject(0); 
     String target = object2.getString("target_id"); 
     String url = object2.getString("url"); 

     JSONArray array3 = object.getJSONArray("field_image"); 
     JSONObject object3 = array3.getJSONObject(0); 
     String alt = object3.getString("alt"); 

     Toast.makeText(Testing.this,value+"\n"+target+"\n"+url+"\n"+alt,Toast.LENGTH_LONG).show(); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
1

Jetzt :), wenn Sie etwas zu analysieren, haben zunächst einige Bibliothek aussehen:

http://www.java2s.com/Code/Jar/g/Downloadgson222jar.htm

Herunterladen gson.jar und dann Java-Klassen erstellen, die Ihre gewünschte json imitieren:

class C1{ 
    private String value; 
} 

class C2{ 
    private String target_id; 
    private String url; 
} 

class C3{ 
    private String target_id; 
    private String alt; 
    private String title; 
    private String width; 
    private String height; 
    private String url; 
} 

class c4{ 
    private List<C1> nid; 
    private List<C2> uid; 
    private List<C3> field_image; 
} 

Da Sie Array von C4 erhalten, können Sie es wie folgt analysieren:

public void onResponse(JSONArray response){ 
    String value = response.toString(); 
    GsonBuilder gb = new GsonBuilder(); 
    Type arrayType = new TypeToken<List<C4>>() {}.getType(); 
    List<C4> data = gb.create().fromJson(value, arrayType); 
} 

So in nur 3 Zeilen von Code, haben Sie Ihre gesamte json serialisiert zu Java-Objekten, die Sie in Ihrem Code verwenden können.