แปลงวัตถุเป็น JSON ใน Android


คำตอบ:


274

คนส่วนใหญ่ใช้ gson: ตรวจสอบสิ่งนี้

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

15
และแจ็คสันด้วย
ม็อบ

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 อยู่ใน classpath ระบบจะเพิ่มโดยอัตโนมัติ
Klaus Groenbaek

2

ตั้งแต่ Android 3.0 (API ระดับ 11) Android มี JSON Parser ที่ปรับปรุงใหม่กว่า

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

อ่านค่าที่เข้ารหัส JSON (RFC 4627) เป็นสตรีมของโทเค็น สตรีมนี้มีทั้งค่าตัวอักษร (สตริงตัวเลขบูลีนและค่าว่าง) ตลอดจนตัวคั่นจุดเริ่มต้นและจุดสิ้นสุดของอ็อบเจ็กต์และอาร์เรย์ โทเค็นจะถูกส่งผ่านตามลำดับความลึกก่อนซึ่งเป็นลำดับเดียวกับที่ปรากฏในเอกสาร 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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.