Konvertieren Sie das Objekt in Android in JSON

128

Gibt es eine einfache Methode, um ein Objekt in Android in JSON zu konvertieren?

Thizzer
quelle

Antworten:

270

Die meisten Leute benutzen gson: überprüfen Sie dies

Gson gson = new Gson();
String json = gson.toJson(myObj);
James L.
quelle
15
Und auch Jackson.
Mob
4
Warum haben wir keine eingebettete Methode für toJson? Aber wir haben für fromJson?
M am
versuche gson zu benutzen sie haben es.
Gumuruh
57
public class Producto {

int idProducto;
String nombre;
Double precio;



public Producto(int idProducto, String nombre, Double precio) {

    this.idProducto = idProducto;
    this.nombre = nombre;
    this.precio = precio;

}
public int getIdProducto() {
    return idProducto;
}
public void setIdProducto(int idProducto) {
    this.idProducto = idProducto;
}
public String getNombre() {
    return nombre;
}
public void setNombre(String nombre) {
    this.nombre = nombre;
}
public Double getPrecio() {
    return precio;
}
public void setPrecio(Double precio) {
    this.precio = precio;
}

public String toJSON(){

    JSONObject jsonObject= new JSONObject();
    try {
        jsonObject.put("id", getIdProducto());
        jsonObject.put("nombre", getNombre());
        jsonObject.put("precio", getPrecio());

        return jsonObject.toString();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return "";
    }

}
ingyesid
quelle
1
Ich bevorzuge diesen Weg, jedes Objekt hat seine eigene Stringify-Methode, danke für den Einblick!
Bhimbim
10

Könnte eine bessere Wahl sein:

@Override
public String toString() {
    return new GsonBuilder().create().toJson(this, Producto.class);
}
Hesam
quelle
Warum ist das eine bessere Wahl?
Neria Nachum
1
Wenn Sie ein Objekt in eine JSON-Zeichenfolge konvertieren möchten, bedeutet dies nicht unbedingt, dass die Zeichenfolgendarstellung des Objekts immer JSON sein soll.
Thizzer
@NeriaNachum, Die Sache war in meinem Kopf, als ich antwortete, eine Klasse mit vielen Attributen zu haben. Durch das Überschreiben der toString()Methode werden viele Zeichenfolgenobjekte erstellt, wenn Sie standardmäßig drucken - generiert von Android Studio oder IntelliJ Idea. Dies ist jedoch eine Codezeile und nutzt die Leistung von GsonBuilder.
Hesam
@ Thizzer, du hast absolut recht. Ich fand es gut, von Entwicklern geteilt und gesehen zu werden (zumindest diejenigen, die mit dem Ansatz nicht vertraut sind). Dann werden sie verwenden, wann immer sie brauchen.
Hesam
Auch ich halte dies für eine bessere Wahl, da die Konvertierung vom Modell selbst aus durchgeführt werden kann, wodurch die Implementierung abstrahiert wird.
Adnaan.zohran
4

Spring für Android macht dies mit RestTemplate ganz einfach:

final String url = "http://192.168.1.50:9000/greeting";
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Greeting greeting = restTemplate.getForObject(url, Greeting.class);
Saeed Zarinfam
quelle
Sie müssen MappingJackson2HttpMessageConverter nicht zu RestTemplate hinzufügen. Wenn sich das Jackson Jar im Klassenpfad befindet, wird es automatisch hinzugefügt.
Klaus Groenbaek
2

Ab Android 3.0 (API Level 11) verfügt Android über einen neueren und verbesserten JSON-Parser.

http://developer.android.com/reference/android/util/JsonReader.html

Liest einen JSON (RFC 4627) -codierten Wert als einen Stream von Token. Dieser Stream enthält sowohl Literalwerte (Zeichenfolgen, Zahlen, Boolesche Werte und Nullen) als auch die Begrenzer für Anfang und Ende von Objekten und Arrays. Die Token werden in der Reihenfolge der Tiefe zuerst durchlaufen, in der Reihenfolge, in der sie im JSON-Dokument angezeigt werden. In JSON-Objekten werden Name / Wert-Paare durch ein einzelnes Token dargestellt.

Mob
quelle
1
Dies ist das Gegenteil von dem, was gefragt wurde.
Matthew Read
2

Laden Sie die Bibliothek Gradle herunter:

compile 'com.google.code.gson:gson:2.8.2'

So verwenden Sie die Bibliothek in einer Methode

Gson gson = new Gson();

//transform a java object to json
System.out.println("json =" + gson.toJson(Object.class).toString());

//Transform a json to java object
String json = string_json;
List<Object> lstObject = gson.fromJson(json_ string, Object.class);
Faxon
quelle