2015-01-11 57 views
7

Tôi có một Danh sách mà tôi cần chuyển đổi thành đối tượng JSON sử dụng GSON. Đối tượng JSON của tôi có JSON Array trong đó.Làm thế nào để chuyển đổi danh sách sang một đối tượng JSON bằng GSON?

public class DataResponse { 

    private List<ClientResponse> apps; 

    // getters and setters 

    public static class ClientResponse { 
     private double mean; 
     private double deviation; 
     private int code; 
     private String pack; 
     private int version; 

     // getters and setters 
    } 
} 

Dưới đây là mã của tôi trong đó tôi cần phải chuyển đổi Danh sách của tôi để JSON Object trong đó có JSON Array trong nó -

public void marshal(Object response) { 

    List<DataResponse.ClientResponse> clientResponse = ((DataResponse) response).getClientResponse(); 

    // now how do I convert clientResponse list to JSON Object which has JSON Array in it using GSON? 

    // String jsonObject = ?? 
} 

Tính đến bây giờ, tôi chỉ có hai mục trong sách thành viên - Vì vậy, tôi cần đối tượng JSON của tôi như thế này -

{ 
    "apps":[ 
     { 
     "mean":1.2, 
     "deviation":1.3 
     "code":100, 
     "pack":"hello", 
     "version":1 
     }, 
     { 
     "mean":1.5, 
     "deviation":1.1 
     "code":200, 
     "pack":"world", 
     "version":2 
     } 
    ] 
} 

Cách tốt nhất để làm điều này là gì?

+1

JSON bạn đã hiển thị không phải là mảng JSON là đối tượng JSON. –

+0

oops xin lỗi, có nó là đối tượng JSON. Hãy để tôi thuật lại câu hỏi. – AKIWEB

Trả lời

19

Nếu response trong phương thức marshal của bạn là DataResponse, thì đó là những gì bạn nên sắp xếp.

Gson gson = new Gson(); 
gson.toJson(response); 

Điều đó sẽ cung cấp cho bạn kết quả đầu ra JSON mà bạn đang tìm kiếm.

25

Có một mẫu từ google gson documentation về cách để thực sự chuyển đổi danh sách để chuỗi json:

Type listType = new TypeToken<List<String>>() {}.getType(); 
List<String> target = new LinkedList<String>(); 
target.add("blah"); 

Gson gson = new Gson(); 
String json = gson.toJson(target, listType); 
List<String> target2 = gson.fromJson(json, listType); 

Bạn cần phải thiết lập các loại danh sách trong toJson phương pháp và vượt qua các đối tượng danh sách để chuyển nó sang chuỗi json hoặc ngược lại.

+0

Điều này là không cần thiết và sẽ không tạo ra JSON mà họ yêu cầu. –

+4

Đây thực sự là câu trả lời hợp lệ duy nhất cho tôi. –

3

Giả sử bạn cũng muốn nhận json theo định dạng

{ 
    "apps": [ 
    { 
     "mean": 1.2, 
     "deviation": 1.3, 
     "code": 100, 
     "pack": "hello", 
     "version": 1 
    }, 
    { 
     "mean": 1.5, 
     "deviation": 1.1, 
     "code": 200, 
     "pack": "world", 
     "version": 2 
    } 
    ] 
} 

thay vì

{"apps":[{"mean":1.2,"deviation":1.3,"code":100,"pack":"hello","version":1},{"mean":1.5,"deviation":1.1,"code":200,"pack":"world","version":2}]} 

bạn có thể sử dụng khá in. Để làm như vậy, hãy sử dụng

Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
String json = gson.toJson(dataResponse); 
Các vấn đề liên quan