2016-07-01 2 views
3

Ich habe JSON String,Deserialisieren JSON-String in android

{ "Status":"Clear", "Class": [{ <br> 
     {"name":"personA", "available" : 1}, <br> 
     {"name":"personB", "available" : 0}, <br> 
     {"name":"personC", "available" : 0}, <br> 
     {"name":"personD", "available" : 1} <br> 
     }] } 

wie unten lesen Wie Deserialisieren ich den JSON String oben?

Ich hatte die Idee, JSONObject zu verwenden, um den gesamten JSON-String aufzunehmen, aber keine Idee, wie man die Arraylist des Objekts (die Liste des Klassenobjekts) bekommt und einer Arraylist <Class> zuordnet.

Führung und Hilfe werden sehr geschätzt.

AKTUALISIERT:

GELÖST UND LÖSUNG GEZEIGT

Ich habe diese Frage gelöst, aber ich glaube, ich habe zu erklären, wie und warum ich eine solche Lösung verwendet.

So weiter meine Frage zu erklären, ist dies ein JSON-String, der ursprünglich ein Objekt, das von einem Webservice meiner apps bekam serialisiert und gesendet.

das ursprüngliche Objekt ist wie folgt:

public class StatusJson 
    { 
     public String Status { get; set; } 
     public List<Class> Class { get; set; } 
    } 

Also, was ich tun müssen, ist nur eine exakt gleiche Klasse in meinem Android erklären dann diesen Code verwenden

statusJson statusJSON=g.fromJson(JSonString,StatusJson.class); 

, welche die automatisch parsen wird json string zum genau gleichen Klassenformat.

Hoffe, dass dies auch Ihnen helfen wird, wenn Sie direkt eine serialisierte JSON-Klasse wie ich senden.

+0

Ich möchte nur betonen, dass die Klassendatei CASE SENSITIVE ist! Ich bin gerade auf dieses Problem gestoßen und habe einen halben Tag gebraucht, um diesen dummen Fehler zu finden – JamesYTL

Antwort

3

Ich empfehle Ihnen, Gson library zu überprüfen.

Sie können eine Klasse mit anotations

private class ClassObj { 
@SerializedName("personA") 
private final String personA; 
.... 
} 

Und dann schaffen

ClassObj object = gson.fromJson(jsonString, ClassObj.class); 

Es Objekt kann kompliziert sein, die andere Gson Objekte oder Sammlung enthalten. Versuchen.

+0

Ihre Antwort gab mir eine Idee und ist der Lösung am nächsten, die ich habe, also werde ich deins akzeptieren. Wird meine Lösung in der Frage posten. – JamesYTL

0

Blick auf die API von JSONObject und JSONArray.

Sie sollten in der Lage sein, es von dort herauszufinden. Sie erstellen einfach ein JSON-Objekt aus der Zeichenfolge:

ex. JSONObject jsonAsObj = new JSONObject(my_json_string);

Dann JSONArray classArray = jsonAsObject.getJSONArray("Class"); benutzen Sie Ihr Array zu bekommen ...

Soweit es zu einer Arraylist konvertieren, müssen Sie Ihre Art schaffen und die JSONArray durchqueren und Objekte erstellen daraus, und fügen Sie sie in Ihre Arraylist. Oder Sie könnten in eine andere Hilfsbibliothek wie GSON schauen.

1

Ich glaube, das ist eine ungültige Json. Ihr Klassenattribut ist ein Array und ein Objekt.

+0

^^ upvoted. Wenn Sie die angegebene Zeichenfolge in einen Viewer einfügen, wird dies als ungültiger JSON angezeigt. Daher sollte das Erstellen Ihres JSONObject eine Ausnahme auslösen. – Submersed

+1

Sollte ein Kommentar sein, keine Antwort. – shmosel

+0

Dieser JSON ist ein Objekt mit dem String Status und einer Liste von Klassenobjekten, die in C# .nets JsonConverter serialisiert sind. Daher glaube ich, dass es gültig sein sollte. – JamesYTL

0

Sie benötigen Gson Bibliothek zum Beispiel verwenden:

@SerializedName ("student") public String name;