Converti l'oggetto in JSON in Android


129

Esiste un metodo semplice per convertire qualsiasi oggetto in JSON in Android?

Risposte:


271

Molte persone usano gson: controlla questo

Gson gson = new Gson();
String json = gson.toJson(myObj);

15
E anche Jackson.
Mob

4
Perché non abbiamo un metodo incorporato per toJson? Ma abbiamo per fromJson?
M il

prova ad usare gson ce l'hanno.
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 "";
    }

}

1
preferisco così, ogni oggetto ha il suo metodo stringify, grazie per la comprensione!
Bhimbim,

10

Potrebbe essere una scelta migliore:

@Override
public String toString() {
    return new GsonBuilder().create().toJson(this, Producto.class);
}

Perché questa è una scelta migliore?
Neria Nachum,

1
Volere poter convertire un oggetto in una stringa JSON non significa necessariamente che la rappresentazione della stringa dell'oggetto sia sempre JSON.
Thizzer,

@NeriaNachum, La cosa era nella mia mente quando ho risposto di avere una classe con molti attributi. Sovrascrivere il suo toString()metodo crea molti oggetti String quando si stampa in modo predefinito, generato da Android Studio o IntelliJ Idea, tuttavia, si tratta di una riga di codice che utilizza la potenza di GsonBuilder.
Hesam,

@Thizzer, hai assolutamente ragione. Pensavo che fosse bello essere condivisi e visti dagli sviluppatori (almeno quelli che non hanno familiarità con l'approccio). Quindi useranno ogni volta che ne avranno bisogno.
Hesam,

Anch'io ritengo che questa sia una scelta migliore in quanto la conversione può essere gestita dal modello stesso, astrarre l'implementazione.
adnaan.zohran,

4

Spring per Android , usa RestTemplate facilmente:

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);

Non è necessario aggiungere MappingJackson2HttpMessageConverter a RestTemplate, se Jackson Jar si trova nel percorso di classe viene aggiunto automaticamente.
Klaus Groenbaek,

2

A partire da Android 3.0 (Livello API 11) Android ha un JSON Parser più recente e migliorato.

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

Legge un valore codificato JSON (RFC 4627) come flusso di token. Questo flusso include sia valori letterali (stringhe, numeri, valori booleani e valori null) che i delimitatori iniziale e finale di oggetti e matrici. I token vengono attraversati nel primo ordine di profondità, nello stesso ordine in cui compaiono nel documento JSON. All'interno degli oggetti JSON, le coppie nome / valore sono rappresentate da un singolo token.


1
Questo è l'opposto di ciò che è stato chiesto.
Matteo Leggi il

2

scarica la libreria Gradle:

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

Per utilizzare la libreria in un metodo

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.