Преобразование объекта в JSON в Android


Ответы:


273

Большинство людей используют gson: проверьте это

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

15
А также Джексон.
Mob

4
Почему у нас нет встроенного метода для toJson? Но у нас есть для fromJson?
M от

попробуйте использовать gson, у них он есть.
gumuruh

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

}

2
Я предпочитаю этот способ, каждый объект имеет свой собственный метод преобразования строк, спасибо за понимание!.
Bhimbim

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 для 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
Это противоположно тому, о чем просили.
Мэтью Рид

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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.