2016-04-18 20 views
-3

Ich verwende den obigen Code zum Analysieren JSON in einer try-catch.Schlecht formatierte JSON-Analyse

Ich benutze 2 als Index in Code unten, weil ich Werte von Kandidaten erhalten würde. Ich denke, das ist seltsam, weil es keine Schlüssel/Wert-Paare im Array gibt. Ich möchte nur den ersten Schlüssel aus diesem Array (In diesem Beispiel subtest1.), Sein Wert ist nicht sinnvoll.

{ 
    "images": [ 
    { 
     "time": 2.86091, 
     "transaction": 
     { 
      "status": "Complete", 
      "subject": "test2", 
      "confidence": 0.77, 
      "gallery_name": "gallerytest1", 
     }, 
     "candidates": [ 
     { 
      "subtest1": "0.802138030529022", 
      "enrollment_timestamp": "1416850761" 
     }, 
     { 
      "elizabeth": "0.802138030529022", 
      "enrollment_timestamp": "1417207485" 
     }, 
     { 
      "elizabeth": "0.777253568172455", 
      "enrollment_timestamp": "1416518415" 
     }, 
     { 
      "elizabeth": "0.777253568172455", 
      "enrollment_timestamp": "1416431816" 
     } 
     ] 
    } ] 
} 
+0

Was ist dein Problem? Deine Frage ist klar. Machen Sie es zuerst klar –

+0

Sie scheinen Json Arrays und Objekte zu verwechseln. In Objekten greifen Sie auf die Eigenschaften nach Namen zu, in Arrays greifen Sie auf die Elemente nach Nummer zu. – Henry

+1

Was möchten Sie von Ihrem Kandidaten-Array? Das erste Element nur? –

Antwort

2

Versuchen Sie dies und sehen, ob es Ihr Problem

JSONArray CandidatesArr = new JSONArray(jsonRootObject.getString("candidates")); 
     JSONObject CandidatesOBJ = CandidatesArr.getJSONObject(0); 
String name=CandidatesOBJ.getString("subtest1"); 

bearbeiten

Um zu überprüfen, ob Ihr Schlüssel subset1 vorhanden ist oder nicht löst versuchen, den folgenden Code:

String name="" 
    if(CandidatesOBJ.has("subtest1")){ 
name=CandidatesOBJ.getString("subtest1"); 
    } 
+0

kann ich nicht sagen. dass ich 'subtest1' brauche, weil es auf Anfrage variiert. Also, es ist kein fester Wert. In der Tat würde ich gerne "subtest1" als Wert erhalten, weil ich es nicht in einer Antwort wissen kann. – plaidshirt

+0

Sie möchten also überprüfen, ob Teilmenge1 in Ihrem Objekt existiert und den Wert von Teilmenge1 erhalten? Oder möchten Sie Teilmenge1 als Wert? wie der Name der Schlüssel (subset1/elizabeth)? –

+0

Siehe diese Antwort [Link] ("http://stackoverflow.com/questions/13573913/android-jsonobject-how-can-i-loop-through-a-flat-json-object-to-get-each-key -a ") –

1

Ihre Parser sollte like.FYI sein JSONArray nicht Schlüssel-Wert-Paare hat aber JSONObject tut.

JSONObject root = new JSONObject(text); 
JSONArray jarray = root.optJSONArray("images); 
if(jarray != null){ 
    JSONObject jObject = jarray.optJSONObject(0); 
    if(jObject != null){ 
     JSONArray candidates = jObject.optJSONArray("candidates"); 
     JSONObject jObj = jarray.optJSONObject(0); 
     if(jObj != null){ 
      String subTest = jObj.optString("subtest1"); 
     } 
    } 
} 
+0

Das gleiche ... kann ich nicht sagen. dass ich "subtest1" brauche, weil es auf Anfrage variiert, ist das kein fixer Name. – plaidshirt

+0

jobj.keys() Sie werden alle Schlüssel im ersten jsonObject.Sie ​​können für alle Json-Objekte in jsonarray Schleife. –

+0

'subTest' string ist auch leer. Ich habe versucht, meine Zeichenfolge anstelle von Untertest1 zu verwenden. – plaidshirt