2016-04-15 12 views
-2

Zuerst möchte ich alle Ratenwerte abrufen, die im Bewertungsnamen verschachtelt sind und davon ausgehen, dass ich nicht weiß, wie viele Bewertungen es gibt, also sollte es eine Art Schleife geben überprüfe sie. Das Json-Objekt wird unten gezeigt.ANDROID JSON Abrufen mehrerer Werte aus einem verschachtelten Schlüssel

{ 
  "restaurant": [ 
    { 
      "restaurantId": "1", 
      "restaurantName": "Restaurant A", 
      "area": "Skudai", 
      "state": "Johor", 
      "rating": [ 
        { 
          "ratingId": "1", 
          "rate": "5", 
          "comment": null, 
          "userId": "15" 
        }, 
        { 
          "ratingId": "2", 
          "rate": "4", 
          "comment": null, 
          "userId": "14" 
        } 
      ] 
    }, 
    { 
      "restaurantId": "2", 
      "restaurantName": "Restaurant 2", 
      "area": "Skudai", 
      "state": "Johor", 
      "rating": null 
    } 
  ], 
  "success": 1 
} 

Unten ist der Code, der am retriegelt Teil in der while-Schleife nicht ganz richtig scheint. Für den Parameter JSONObject im getAverage nehme ich bereits das erste Restaurant, welches Restaurant A ist, Restaurant 2 ist nicht enthalten.

public int getAverage(JSONObject jsonObject){ 
    int average = 0, count = 0; 

    while (jsonObject.has("rate")){ 
     average += Integer.parseInt(jsonObject.optString("rate")); 
     count++; 
    } 

    average /= count; 

    return average; 
} 

Wie rufe ich die mehrfachen Werte der Rate von der verschachtelten Bewertung mit optstring(), um den Mittelwert zu berechnen oder sollte ich andere Art und Weise, um es abzurufen?

+1

wo ist dein Code ??? Hast du etwas probiert? –

+0

Kopieren Sie die JSON-Antwort, fügen Sie sie in http://json2csharp.com ein, erhalten Sie Klassen als C#, konvertieren Sie die Klassen in Java, verwenden Sie GSON, um JSON zu parsen. Wenn Sie nicht können, überprüfen Sie bitte diese http://stackoverflow.com/questions/36625488/how-to-deserialize-json-with-a-string-url-name-value-pair/36625899#36625899 –

Antwort

1

verwenden Wenn Sie wollen eine Bibliothek nicht verwenden können Sie die JSON-String parsen für jedes Restaurant alle „Bewertung“ zu bekommen.

Beispiel:

try{ 
     JSONObject o = new JSONObject(json); 
     JSONArray restaurants = o.getJSONArray("restaurant"); 
     for(int i = 0; i < restaurants.length(); i++){ 
      JSONObject restaurant = restaurants.getJSONObject(i); 
      JSONArray ratings = restaurant.getJSONArray("rating"); 
      for(int j = 0; j < ratings.length(); j++){ 
       JSONObject rating = ratings.getJSONObject(j); 
       String ratingId = rating.getString("ratingId"); 
       Log.d("TestJson ratingId", ratingId); 
       String rate = rating.optString("rate"); 
       Log.d("TestJson rate", rate); 
      } 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
+0

Hier haben wir nehmen Einziger Wert für ratingId und Rate. Wenn wir alle ID und Rate brauchen dann ?? –

+0

Sie müssen nur eine Sammlung für das Restaurant erstellen und innerhalb der for-Schleife jeden Wert zur Sammlung hinzufügen ... – Nirekin

+0

Sammlung wie Getter Setter-Methoden für eine Klasse \ –

0

Google hat bereits eine Bibliothek erstellt.

Sie müssen Schleifen und alle nicht schreiben. Besser sollten Sie verwenden Java-Klasse (Modell/POJO) Serialisierungs-/Deserialisierungsbibliothek gson , die Sie automatisch in JSON/JSONArray konvertiert.

Und bitte nicht üben, lange for Schleifen zu schreiben. Ich habe oft verwendet, um Klasse mit Array nur mit gson zu analysieren.

Hilfe, wenn Ihr Android-Studio GSON with studio

2

Sie diesen Code für Referenzen verwenden:

   ArrayList<DrawerCategory> list = new ArrayList<DrawerCategory>(); 
       ArrayList<DrawerSubCategory> ch_list; 
       JSONArray jArray = root.getJSONArray("restaurant"); 
       for (int i = 0; i < jArray.length(); i++) { 
        JSONObject jObject = jArray.getJSONObject(i); 
        DrawerCategory gru = new DrawerCategory(); 
        gru.setrestaurantId(jObject.getString("restaurantId")); 
        . 
        . 
        if (jObject.getString("rating").trim().equalsIgnoreCase("null")) { 
         ch_list = new ArrayList<DrawerSubCategory>(); 
         DrawerSubCategory ch = new DrawerSubCategory(); 
         ch.setName(jObject.getString("rating")); 
         ch_list.add(ch); 
         gru.setItems(ch_list); 
        } else { 
        JSONArray jArray1 = jObject.getJSONArray("rating"); 
         ch_list = new ArrayList<DrawerSubCategory>(); 
         for (int j = 0; j < jArray1.length(); j++) { 
          JSONObject jObject1 = jArray1.getJSONObject(j); 
          DrawerSubCategory ch = new DrawerSubCategory(); 
          ch.setratingId(jObject1.getString("ratingId")); 
          . 
          . 
          ch_list.add(ch); 
          gru.setItems(ch_list); 
         } 
        } 
        list.add(gru); 
       } 

Hier DrawerCategory, DrawerSubCategory ist Artikel Klasse, die Getter und Setter-Methoden enthält.

Verwandte Themen