Convertir objeto a JSON en Android


129

¿Existe un método simple para convertir cualquier objeto a JSON en Android?

Respuestas:


271

La mayoría de las personas usan gson: verifique esto

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

15
Y también Jackson.
Multitud

44
¿Por qué no tenemos un método incrustado para toJson? Pero tenemos para de Json?
M al

intenta usar gson lo tienen.
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
prefiero esta forma, cada objeto tiene su propio método de stringify, ¡gracias por la información!
Bhimbim

10

Podría ser una mejor opción:

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

¿Por qué es esta una mejor opción?
Neria Nachum

1
Querer poder convertir un objeto en una cadena JSON no significa necesariamente que desee que la representación de cadena del objeto sea siempre JSON.
Thizzer

@NeriaNachum, La cosa estaba en mi mente cuando respondí que tenía una clase con muchos atributos. Anular su toString()método crea muchos objetos de cadena cuando imprime de forma predeterminada, generados por Android Studio o IntelliJ Idea, sin embargo, esta es una línea de código y utiliza el poder de GsonBuilder.
Hesam

@Thizzer, tienes toda la razón. Estaba pensando que es bueno ser compartido y visto por los desarrolladores (aquellos que no están familiarizados con el enfoque al menos). Luego lo usarán cuando lo necesiten.
Hesam

También creo que esta es una mejor opción, ya que la conversión se puede manejar desde el modelo en sí mismo, resumiendo la implementación.
adnaan.zohran

4

Spring para Android hace esto usando RestTemplate fácilmente:

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

No necesita agregar MappingJackson2HttpMessageConverter a RestTemplate, si Jackson Jar está en la ruta de clase, se agrega automáticamente.
Klaus Groenbaek

2

A partir de Android 3.0 (API Nivel 11), Android tiene un analizador JSON más reciente y mejorado.

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

Lee un valor codificado JSON (RFC 4627) como una secuencia de tokens. Esta secuencia incluye tanto valores literales (cadenas, números, booleanos y nulos) como los delimitadores de inicio y fin de objetos y matrices. Los tokens se atraviesan en primer orden de profundidad, el mismo orden en que aparecen en el documento JSON. Dentro de los objetos JSON, los pares de nombre / valor están representados por un solo token.


1
Esto es lo contrario de lo que se le preguntó.
Mateo leyó el

2

descargue la biblioteca Gradle:

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

Para usar la biblioteca en un método.

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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.