Konversi objek ke JSON di Android

129

Apakah ada metode sederhana untuk mengkonversi objek apa pun ke JSON di Android?

Thizzer
sumber

Jawaban:

271

Kebanyakan orang menggunakan gson: periksa ini

Gson gson = new Gson();
String json = gson.toJson(myObj);
James L.
sumber
15
Dan juga Jackson.
Mob
4
Mengapa kami tidak memiliki metode tertanam untuk toJson? Tapi kita punya untuk dari Johnny?
M pada
coba gunakan gson yang mereka miliki.
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
sumber
1
saya lebih suka cara ini, masing-masing objek memiliki metode string sendiri, terima kasih atas wawasannya!
Bhimbim
10

Mungkin pilihan yang lebih baik:

@Override
public String toString() {
    return new GsonBuilder().create().toJson(this, Producto.class);
}
Hesam
sumber
Mengapa ini pilihan yang lebih baik?
Neria Nachum
1
Ingin dapat mengkonversi objek ke string JSON tidak berarti Anda ingin representasi string objek selalu JSON.
Thizzer
@NeriaNachum, Masalahnya ada dalam pikiran saya ketika saya menjawab memiliki kelas dengan banyak atribut. Mengesampingkan toString()metodenya menciptakan banyak objek String ketika Anda mencetak dengan cara default - dihasilkan oleh Android Studio atau IntelliJ Idea - namun, ini adalah satu baris kode dan menggunakan kekuatan GsonBuilder.
Hesam
@Thizzer, Anda benar sekali. Saya pikir itu baik untuk dibagikan dan dilihat oleh pengembang (mereka yang tidak akrab dengan pendekatan setidaknya). Kemudian mereka akan menggunakannya kapan pun mereka butuhkan.
Hesam
Saya juga merasa ini sebagai pilihan yang lebih baik karena konversi dapat ditangani dari model itu sendiri, mengabstraksi implementasi.
adnaan.zohran
4

Spring untuk Android melakukan ini menggunakan RestTemplate dengan mudah:

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
sumber
Anda tidak perlu menambahkan MappingJackson2HttpMessageConverter ke RestTemplate, jika Jackson Jar ada di classpath maka ditambahkan secara otomatis.
Klaus Groenbaek
2

Pada Android 3.0 (API Level 11) Android memiliki JSON Parser yang lebih baru dan lebih baik.

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

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token. Aliran ini mencakup nilai literal (string, angka, boolean, dan null) serta pembatas awal dan akhir objek dan array. Token dilintasi dalam urutan pertama, urutan yang sama dengan yang muncul di dokumen JSON. Dalam objek JSON, pasangan nama / nilai diwakili oleh token tunggal.

Massa
sumber
1
Ini kebalikan dari apa yang ditanyakan.
Matius Baca
2

unduh perpustakaan Gradle:

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

Untuk menggunakan perpustakaan dalam suatu metode.

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
sumber