Chuyển đổi đối tượng sang JSON trong Android


129

Có một phương pháp đơn giản để chuyển đổi bất kỳ đối tượng nào sang JSON trong Android không?

Câu trả lời:


271

Hầu hết mọi người đang sử dụng gson: kiểm tra điều này

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

15
Và cả Jackson nữa.
Mob

4
Tại sao chúng ta không có phương thức nhúng cho toJson? Nhưng chúng ta có từJson không?
M vào

cố gắng sử dụng gson họ có nó.
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 "";
    }

}

1
Tôi thích cách này, mỗi đối tượng có phương thức xâu chuỗi riêng, cảm ơn bạn đã hiểu biết!
Bhimbim

10

Có thể là sự lựa chọn tốt hơn:

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

Tại sao đây là một lựa chọn tốt hơn?
Neria Nachum

1
Muốn có thể chuyển đổi một đối tượng thành một chuỗi JSON không nhất thiết có nghĩa là bạn muốn biểu diễn chuỗi của đối tượng luôn luôn là JSON.
Thizzer

@NeriaNachum, Điều đó là trong tâm trí của tôi khi tôi trả lời có một lớp học với rất nhiều thuộc tính. Ghi đè toString()phương thức của nó tạo ra nhiều đối tượng Chuỗi khi bạn in theo cách mặc định - được tạo bởi Android Studio hoặc IntelliJ Idea - tuy nhiên, đây là một dòng mã và sử dụng sức mạnh của GsonBuilder.
Hesam

@Thizzer, Bạn hoàn toàn đúng. Tôi đã nghĩ rằng thật tốt khi được chia sẻ và nhìn thấy bởi các nhà phát triển (những người không quen thuộc với cách tiếp cận ít nhất). Sau đó, họ sẽ sử dụng bất cứ khi nào họ cần.
Hesam

Tôi cũng cảm thấy đây là sự lựa chọn tốt hơn vì việc chuyển đổi có thể được xử lý từ chính mô hình, trừu tượng hóa việc thực hiện.
adnaan.zohran

4

Spring cho Android thực hiện việc này bằng cách sử dụng RestTemplate một cách dễ dàng:

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);

Bạn không cần thêm MappingJackson2HttpMessageConverter vào RestTemplate, nếu Jackson Jar nằm trong đường dẫn lớp, nó sẽ được thêm tự động.
Klaus Groenbaek

2

Kể từ Android 3.0 (API cấp 11), Android có Trình phân tích cú pháp JSON gần đây và được cải tiến hơn.

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

Đọc giá trị được mã hóa JSON (RFC 4627) dưới dạng luồng mã thông báo. Luồng này bao gồm cả các giá trị bằng chữ (chuỗi, số, booleans và null) cũng như các dấu phân cách bắt đầu và kết thúc của các đối tượng và mảng. Các mã thông báo được duyệt theo thứ tự chiều sâu, cùng thứ tự xuất hiện trong tài liệu JSON. Trong các đối tượng JSON, các cặp tên / giá trị được biểu thị bằng một mã thông báo duy nhất.


1
Điều này trái ngược với những gì đã được hỏi.
Matthew đọc

2

tải thư viện Gradle:

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

Để sử dụng thư viện trong một phương thức.

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.