Converter objeto em JSON no Android

129

Existe um método simples para converter qualquer objeto em JSON no Android?

Thizzer
fonte

Respostas:

271

A maioria das pessoas está usando o gson: verifique isto

Gson gson = new Gson();
String json = gson.toJson(myObj);
James L
fonte
15
E também Jackson.
Mob
4
Por que não temos um método incorporado para o toJson? Mas nós temos do Jackson?
M em
tente usar gson eles têm.
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
fonte
1
Eu prefiro assim, cada objeto tem seu próprio método stringify, obrigado pelo insight!
Bhimbim
10

Pode ser a melhor escolha:

@Override
public String toString() {
    return new GsonBuilder().create().toJson(this, Producto.class);
}
Hesam
fonte
Por que essa é uma escolha melhor?
Neria Nachum 23/10
1
Deseja poder converter um objeto em uma sequência JSON não significa necessariamente que você deseja que a representação da sequência do objeto seja sempre JSON.
Thizzer
@NeriaNachum, A coisa estava em minha mente quando eu respondi ter uma aula com muitos atributos. A substituição de seu toString()método cria muitos objetos String quando você imprime da maneira padrão - gerada pelo Android Studio ou IntelliJ Idea - no entanto, essa é uma linha de código e usa o poder do GsonBuilder.
Hesam #
@ Thizzer, você está absolutamente certo. Eu estava pensando que é bom ser compartilhado e visto pelos desenvolvedores (aqueles que não estão familiarizados com a abordagem pelo menos). Então eles usarão sempre que precisarem.
Hesam #
Eu também sinto essa escolha tão melhor quanto a conversão pode ser manipulada a partir do próprio modelo, abstraindo a implementação.
adnaan.zohran
4

O Spring para Android faz isso usando o 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);
Saeed Zarinfam
fonte
Você não precisa adicionar MappingJackson2HttpMessageConverter ao RestTemplate, se o Jackson Jar estiver no caminho de classe, ele será adicionado automaticamente.
Klaus Groenbaek 11/11
2

A partir do Android 3.0 (API Nível 11), o Android possui um analisador JSON mais recente e aprimorado.

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

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens. Esse fluxo inclui valores literais (cadeias, números, booleanos e nulos), bem como os delimitadores de início e fim de objetos e matrizes. Os tokens são atravessados ​​em ordem de profundidade, a mesma ordem em que aparecem no documento JSON. Nos objetos JSON, os pares nome / valor são representados por um único token.

Mob
fonte
1
Este é o oposto do que foi perguntado.
Mateus Leia
2

faça o download da biblioteca Gradle:

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

Para usar a biblioteca em um 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);
Faxon
fonte