Перетворити об’єкт в JSON в Android


Відповіді:


271

Більшість людей використовують gson: перевірте це

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

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

4
Чому у нас немає вбудованого методу для toJson? Але ми маємо від Джона?
М

спробуйте використовувати gson у них є.
гуму

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.
Гесам

@Thizzer, Ви абсолютно праві. Я думав, що добре, щоб вони поділилися та побачили розробники (ті, хто хоча б не знайомий із підходом). Тоді вони будуть використовувати, коли потрібно.
Гесам

Я теж вважаю це кращим вибором, оскільки конверсію можна обробляти з самої моделі, віднімаючи реалізацію.
adnaan.zohran

4

Весна для 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 Parser.

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

Читає закодоване значення JSON (RFC 4627) як потік лексем. Цей потік включає в себе як буквальні значення (рядки, числа, булеві значення, так і нулі), а також початкові та кінцеві роздільники об'єктів і масивів. Маркери проходять в першому порядку по глибині, тим же порядком, що і в документі 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.