Konvertieren von komplexen Java-Objekt zu Json
Muss ich konvertieren Sie die folgende Klasse:
package comS309.traxz.data;
import java.util.Collection;
import org.json.JSONException;
import org.json.JSONObject;
public class ExerciseSession {
public String DateCreated;
public String TotalTime;
public String CaloriesBurned;
public String AvgSpeed;
public String SessionName;
public String Distance;
public String SessionType;
public String UserId;
public Collection<LatLon> LatLons;
}
Denen LatLon ist wie folgt:
public class LatLon {
public String LatLonId;
public String Latitude;
public String Longitude;
public String ExerciseSessionId;
public String LLAveSpeed;
public String Distance;
}
So Klasse ExerciseSession hat eine Sammlung von LatLon-Objekte. Jetzt brauche ich zum konvertieren Der ExerciseSession Klasse in ein Json-format aus java und schicken Sie es an meinem server.
Ich mache das auf dem android OS, wenn das zählt.
Meine aktuelle Lösung ist diese:
JSONObject ExerciseSessionJSOBJ = new JSONObject();
ExerciseSessionJSOBJ.put("DateCreated", this.DateCreated);
ExerciseSessionJSOBJ.put("TotalTime", this.TotalTime);
ExerciseSessionJSOBJ.put("CaloriesBurned", this.CaloriesBurned);
ExerciseSessionJSOBJ.put("AvgSpeed", this.AvgSpeed);
ExerciseSessionJSOBJ.put("SessionName", this.SessionName);
ExerciseSessionJSOBJ.put("Distance", this.Distance);
ExerciseSessionJSOBJ.put("SessionType", this.SessionType);
ExerciseSessionJSOBJ.put("UserId", this.UserId);
//add the collection
for(LatLon l: LatLons)
{
ExerciseSessionJSOBJ.accumulate("LatLons", l);
}
Ich bin nicht sicher, ob dieses gültig ist.. ich bin ein Neuling mit Json und Hilfe brauchen.
Vielen Dank im Voraus für die Hilfe!
InformationsquelleAutor Aziz | 2011-11-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist sehr einfach über die Google-GSON-Bibliothek. Hier ist ein Beispiel verwenden:
Und Holen Sie das Objekt zurück:
http://code.google.com/p/google-gson/
Hi binnyb, m-converting-Komplex-Objekt in JSON mit der Antwort, die Sie zur Verfügung gestellt. Aber ich habe einige Runtime-Ausnahmen, wie
java.lang.StackOverflowError: stack size 8MB
undandroid.os.TransactionTooLargeException
Kann u plz mir helfenSie sind vorbei, zu viel Daten, Sie sind beste Wette ist, um zu erforschen die Ursache für diesen Fehler und versuchen, Sie zu verringern das auftreten solcher großen Brocken von Daten, finden Sie in diesem Beitrag: stackoverflow.com/questions/11451393/...
Vielen Dank für ua Antwort, ich werde es versuchen.
InformationsquelleAutor binnyb
Kann man auch serialisieren des Objekts mit flexjson: http://flexjson.sourceforge.net/
Gson ist auch eine praktikable option ja... 🙂
InformationsquelleAutor Matjaz Muhic
Ich denke mit dem sammeln, der richtige ist. Siehe: http://www.json.org/javadoc/org/json/JSONObject.html#accumulate(java.lang.String,%20java.lang.Objekt)
Aber Sie brauchen, um zu erstellen ein JSONObject für jeden LatLon wie Sie für die ExerciseSession Objekt.
Dann die folgende Zeile falsch ist:
ExerciseSessionJSOBJ.ansammeln("LatLons", l);
"l" muss transformiert werden.
InformationsquelleAutor Alejandro Diaz
Ich würde wirklich vorschlagen, Sie vermeiden Sie die Verwendung JSONObject konvertieren zwischen Zeichenketten und Java-Objekte. Es wird wahrscheinlich behaupten, Ihren Verstand, wenn Sie haben zu viel zu tun. Als alternative, ich bin ein großer fan von Jackson, die tut, was Sie beschreiben, in eine wirklich angenehme und einfache Art und Weise.
Als ein einfaches Beispiel,
Diese Ausgänge
Are they equal? true
.So verwenden Sie
readValue()
zum konvertieren von json zu Java-Objekt,writeValueAsString()
zu schreiben, ein Objekt wieder in json.@JsonCreator
markiert den Konstruktor Jackson verwenden sollten, um zu konvertieren zw json und Java.@JsonProperty("jsonKeyName")
kennzeichnet den Namen der Variablen in die json-string und die Java-variable zuzuordnen.Dies ist ein wenig verwirrend auf den ersten, sondern spart eine Menge Zeit, sobald Sie es herausfinden. Lassen Sie mich wissen, wenn etwas unklar ist.
Der Grund, mein Beispiel ist komplizierter als die GSON toJson/fromJson Methoden ist, dass auf Android, viele apps gehen durch eine Verschleierung Schritt, bevor Sie auf den Markt kommen. Dies bedeutet, dass Sie nicht davon abhängen, Variablennamen übrigen das gleiche wie Ihre JSON-Pendants. Als Ergebnis, werden Sie haben zu kommentieren mit
@JsonProperty
und Felder angeben. Sie können entfernen Sie alle Anmerkungen und immer noch Jackson zu arbeiten, aber weder Jackson noch GSON wird die Arbeit nach der Verschleierung, es sei denn, Sie vermitteln variable mapping-Informationen.InformationsquelleAutor plowman