2011-04-06 20 views

Respuesta

175

La mayoría de la gente está utilizando GSON: https://github.com/google/gson

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

Y también Jackson. – Mob

+1

¿Por qué no tenemos un método integrado para toJson? Pero tenemos para Json? –

3

A partir de Android 3.0 (API nivel 11) Android tiene una más reciente y mejor JSON Analizador.

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

Lee un JSON (RFC 4627) valor codificado como una corriente de tokens. Esta corriente incluye tanto valores literales (cadenas, números, booleanos, y valores nulos), así como el inicio y fin a delimitadores de los objetos y arrays. Los tokens son atravesados ​​en orden de profundidad-primero, del mismo orden que que aparecen en el documento JSON. Dentro de los objetos JSON, los pares nombre/valor están representados por un único token.

50
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 ""; 
    } 

} 
+0

prefiero de esta manera, cada objeto tiene su propio método de stringify, ¡gracias por la información! – Bhimbim

2

Spring for Android hacer esto utilizando 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); 
+0

No necesita agregar MappingJackson2HttpMessageConverter a RestTemplate, si el Jackson Jar está en el classpath, se agrega automáticamente. –

-1

Esto cómo se puede convertir una cadena JSON JSON a objetos de forma nativa sin necesidad de utilizar ninguna biblioteca externa y obtener los valores correspondientes para una clave. Afortunadamente, lo siguiente debería funcionar.

String JSONstring = "{/"key1/":/"I am Value for Key1/"}"; 

//Import these libraries 
import org.json.JSONException; 
import org.json.JSONObject; 

//Code below 
try 
{ 
String myVariable = jsonObject.optString("key1", "Fallback Value if key1 is not present"); 
System.out.println("Testing: "+ myVariable); 
} 
catch (JSONException e) {e.printStackTrace();} 
+2

Esto no responde a una pregunta. También jsonObject es desconocido aquí. – CoolMind

7

podría ser mejor elección:

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

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

+0

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

+0

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