Convertir un objet en JSON sous Android

129

Existe-t-il une méthode simple pour convertir n'importe quel objet en JSON dans Android?

Thizzer
la source

Réponses:

271

La plupart des gens utilisent gson: vérifiez ceci

Gson gson = new Gson();
String json = gson.toJson(myObj);
James L
la source
15
Et aussi Jackson.
Mob
4
Pourquoi n'avons-nous pas de méthode intégrée pour toJson? Mais nous avons pour fromJson?
M
essayez d'utiliser gson, ils l'ont.
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
la source
1
je préfère cette façon, chaque objet a sa propre méthode stringify, merci pour la perspicacité!.
Bhimbim
10

Peut-être un meilleur choix:

@Override
public String toString() {
    return new GsonBuilder().create().toJson(this, Producto.class);
}
Hesam
la source
Pourquoi est-ce un meilleur choix?
Neria Nachum
1
Vouloir pouvoir convertir un objet en chaîne JSON ne signifie pas nécessairement que vous souhaitez que la représentation sous forme de chaîne de l'objet soit toujours JSON.
Thizzer
@NeriaNachum, Le truc était dans mon esprit quand j'ai répondu avoir une classe avec beaucoup d'attributs. Le remplacement de sa toString()méthode crée de nombreux objets String lorsque vous imprimez de la manière par défaut - générée par Android Studio ou IntelliJ Idea - cependant, il s'agit d'une ligne de code et utilisant la puissance de GsonBuilder.
Hesam
@Thizzer, vous avez absolument raison. Je pensais qu'il était bon d'être partagé et vu par les développeurs (au moins ceux qui ne connaissent pas l'approche). Ensuite, ils utiliseront quand ils en auront besoin.
Hesam
Je pense aussi que c'est un meilleur choix car la conversion peut être gérée à partir du modèle lui-même, en faisant abstraction de l'implémentation.
adnaan.zohran
4

Spring pour Android le fait en utilisant RestTemplate facilement:

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
la source
Vous n'avez pas besoin d'ajouter MappingJackson2HttpMessageConverter à RestTemplate, si le Jackson Jar est dans le chemin de classe, il est ajouté automatiquement.
Klaus Groenbaek
2

À partir d'Android 3.0 (niveau d'API 11), Android dispose d'un analyseur JSON plus récent et amélioré.

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

Lit une valeur codée JSON (RFC 4627) en tant que flux de jetons. Ce flux comprend à la fois les valeurs littérales (chaînes, nombres, booléens et valeurs nulles) ainsi que les délimiteurs de début et de fin des objets et des tableaux. Les jetons sont parcourus dans le premier ordre de profondeur, dans le même ordre qu'ils apparaissent dans le document JSON. Dans les objets JSON, les paires nom / valeur sont représentées par un seul jeton.

Foule
la source
1
C'est le contraire de ce qui a été demandé.
Matthieu a lu
2

télécharger la bibliothèque Gradle:

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

Pour utiliser la bibliothèque dans une méthode.

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
la source