Android'de nesneyi JSON'a dönüştür


130

Android'de herhangi bir nesneyi JSON'a dönüştürmek için basit bir yöntem var mı?

Yanıtlar:


273

Çoğu kişi gson kullanıyor: bunu kontrol edin

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

15
Ve ayrıca Jackson.
Mob

4
Neden toJson için gömülü bir yöntemimiz yok? Ama Johnson'dan var mı?
M

sahip oldukları gson'u kullanmaya çalışın.
gumuruh

58
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
Bu yolu tercih ediyorum, her nesnenin kendi stringify yöntemi var, anlayış için teşekkürler!
Bhimbim

10

Daha iyi bir seçim olabilir:

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

Bu neden daha iyi bir seçim?
Neria Nachum

1
Bir nesneyi JSON dizesine dönüştürebilmek, nesnenin dize temsilinin her zaman JSON olmasını istediğiniz anlamına gelmez.
Thizzer

@NeriaNachum, Bir çok niteliği olan bir sınıfa sahip olduğumu yanıtladığımda şey aklımdaydı. toString()Yönteminin geçersiz kılınması, varsayılan şekilde yazdırdığınızda (Android Studio veya IntelliJ Idea tarafından oluşturulmuş) birçok String nesnesi oluşturur, ancak bu bir kod satırıdır ve GsonBuilder'ın gücünü kullanır.
Hesam

@Thizzer, Kesinlikle haklısınız. Geliştiriciler tarafından paylaşılmanın ve görülmenin iyi olduğunu düşünüyordum (en azından yaklaşıma aşina olmayanlar). O zaman ihtiyaç duyduklarında kullanacaklar.
Hesam

Ben de bunun daha iyi bir seçim olduğunu düşünüyorum, çünkü dönüşüm modelin kendisinden ele alınabilir ve uygulamayı soyutlayabilir.
adnaan.zohran

4

Spring for Android , RestTemplate kullanarak bunu kolayca yapın:

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'e eklemenize gerek yoktur, Jackson Jar sınıf yolundaysa otomatik olarak eklenir.
Klaus Groenbaek

2

Android 3.0'dan itibaren (API Seviye 11) Android, daha yeni ve geliştirilmiş bir JSON Ayrıştırıcısına sahiptir.

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

Bir jeton akışı olarak JSON (RFC 4627) kodlanmış bir değeri okur. Bu akış, hem değişmez değerleri (dizeler, sayılar, mantıksal değerler ve boş değerler) hem de nesnelerin ve dizilerin başlangıç ​​ve bitiş sınırlayıcılarını içerir. Jetonlar, JSON belgesinde göründükleri sırayla, derinlemesine birinci sırada gezilir. JSON nesneleri içinde ad / değer çiftleri tek bir belirteç ile temsil edilir.


1
Bu, sorulanın tam tersi.
Matthew

2

Gradle kütüphanesini indirin:

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

Kitaplığı bir yöntemde kullanmak için.

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.