2016-03-27 12 views
0

Dies ist mein erstes Mal mit JSON-Daten zu analysieren. Ich verwende das Google Knowledge Graph API. Ich habe die API funktioniert und ich kann das JSON-Ergebnis bekommen. Dies sind die Beispielrückgabedaten von Google für eine Beispielabfrage, die ich jetzt zum Testen verwende.Warum bekomme ich immer JSON Exception?

{ 
    "@context": { 
"@vocab": "http://schema.org/", 
"goog": "http://schema.googleapis.com/", 
"resultScore": "goog:resultScore", 
"detailedDescription": "goog:detailedDescription", 
"EntitySearchResult": "goog:EntitySearchResult", 
"kg": "http://g.co/kg" 
    }, 
    "@type": "ItemList", 
    "itemListElement": [ 
{ 
    "@type": "EntitySearchResult", 
    "result": { 
    "@id": "kg:/m/0dl567", 
    "name": "Taylor Swift", 
    "@type": [ 
     "Thing", 
     "Person" 
    ], 
    "description": "Singer-songwriter", 
    "image": { 
     "contentUrl": "https://t1.gstatic.com/images?q=tbn:ANd9GcQmVDAhjhWnN2OWys2ZMO3PGAhupp5tN2LwF_BJmiHgi19hf8Ku", 
     "url": "https://en.wikipedia.org/wiki/Taylor_Swift", 
     "license": "http://creativecommons.org/licenses/by-sa/2.0" 
    }, 
    "detailedDescription": { 
     "articleBody": "Taylor Alison Swift is an American singer-songwriter and actress. Raised in Wyomissing, Pennsylvania, she moved to Nashville, Tennessee, at the age of 14 to pursue a career in country music. ", 
     "url": "http://en.wikipedia.org/wiki/Taylor_Swift", 
     "license": "https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License" 
    }, 
    "url": "http://taylorswift.com/" 
    }, 
    "resultScore": 896.576599 
} 
    ] 
} 

So will ich es analysieren, so dass ich den Namen bekommen, Beschreibung, detaillierte Beschreibung. Dies ist mein Code, aber ich bekomme immer die Ausnahme. Irgendwelche Ideen warum?

try { 
        JSONObject object=new JSONObject(gggg); 
        JSONArray itemListElement = object.getJSONArray("itemListElement"); 
        for(int i=0; i < itemListElement.length();i++){ 
          JSONObject c = itemListElement.getJSONObject(i); 
          JSONObject results = c.getJSONObject("result"); 
          String name = results.getString("name").toString(); 
          String description = results.getString("description").toString(); 
          String detailedDescription = results.getString("articleBody").toString(); 
          gggg = "Name: "+name+"\n Description: "+description+"\n "+detailedDescription; 
        } 

        responseView.append(gggg); 

      } catch (JSONException e) { 
        Toast.makeText(MainActivity.this,gggg,Toast.LENGTH_LONG).show(); 
      } 

Auch die string gggg enthält die JSON-Daten. Ich weiß nicht warum, aber ich bekomme immer die Ausnahme. Bitte sagen Sie mir, was ist der Fehler in meinem Code und wie man es repariert.

Danke.

Antwort

0

Mit in der Android-Json-Bibliothek hat es eine Methode namens HAS-Element, die wahr oder falsch zurückgibt. Nach erfolgreicher Überprüfung, greifen Sie auf das Element zu. Die Erwartung wird dadurch verursacht, dass tring auf ein Element zugreift, das nicht vorhanden ist.

Es lohnt sich, nach jedem Erstellen eines neuen Objekts auszudrucken, um sicherzustellen, dass die Objekte erstellt werden. Es wird auch darauf hinarbeiten, wo die Erwartung ist.

0

„Name: Taylor Swift. Beschreibung: Singer-Songwriterin Taylor Alison Swift eine US-amerikanische Singer-Songwriterin und Schauspielerin ist hoch in Wyomissing, Pennsylvania, zog sie nach Nashville, Tennessee, am Alter von 14 bis eine Karriere in Country-Musik zu verfolgen. "

Das Problem ist Ihre String detailedDescription Linie.

Sie müssen das detailedDescription-Objekt abrufen, bevor Sie den articleBody abrufen.

for(int i=0; i < itemListElement.length();i++){ 
      JSONObject c = itemListElement.getJSONObject(i); 
      JSONObject results = c.getJSONObject("result"); 
      String name = results.getString("name"); 
      String description = results.getString("description"); 
      JSONObject detailedDescription = results.getJSONObject("detailedDescription"); 
      String articleBody = detailedDescription.getString("articleBody"); 
      String x = "Name: "+name+"\n Description: "+description+"\n "+articleBody; 
     } 

Auch sind Ihre .toString() Methodenaufrufe überflüssig, da Sie .getString() auf dem JSON-Objekt aufrufen.

Verwandte Themen