在Android中将对象转换为JSON


129

有没有一种简单的方法可以在Android中将任何对象转换为JSON?

Answers:


271

大多数人都在使用gson:检查此

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

15
还有杰克逊。
暴徒

4
为什么我们没有toJson的嵌入式方法?但是我们有来自fromJson的东西吗?
M在

尝试使用gson他们拥有它。
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
我更喜欢这种方式,每个对象都有自己的stringify方法,谢谢您的见解!
比姆宾

10

可能是更好的选择:

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

为什么这是一个更好的选择?
Neria Nachum

1
希望能够将对象转换为JSON字符串并不一定意味着您希望对象的字符串表示形式始终为JSON。
Thizzer

@NeriaNachum,当我回答拥有一个具有很多属性的类时,这就是我的想法。覆盖其toString()方法时,以默认方式打印时将创建许多String对象-由Android Studio或IntelliJ Idea生成-但是,这是一行代码,并使用GsonBuilder的功能。
Hesam

@Thizzer,你绝对正确。我当时认为与开发人员(至少对方法不熟悉的人)共享并看到它是一件好事。然后,它们将在需要时使用。
Hesam

我也觉得这是更好的选择,因为可以从模型本身处理转换,从而抽象出实现。
adnaan.zohran

4

Spring for Android使用RestTemplate轻松做到这一点:

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

您无需将MappingJackson2HttpMessageConverter添加到RestTemplate,如果Jackson Jar在类路径中,则会自动添加它。
克劳斯·格罗恩贝克

2

从Android 3.0(API级别11)开始,Android具有更新和改进的JSON解析器。

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

读取JSON(RFC 4627)编码的值作为令牌流。此流包括文字值(字符串,数字,布尔值和null)以及对象和数组的开始和结束定界符。令牌以深度优先顺序遍历,与JSON文档中出现的顺序相同。在JSON对象中,名称/值对由单个令牌表示。


1
这与要求的相反。
马修(Matthew)阅读了

2

下载Gradle库:

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

在方法中使用库。

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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.