2013-08-24 47 views
85

Tôi có một tập tin JSON như thế này:Sử dụng GSON để phân tích một mảng JSON

[ 
    { 
     "number": "3", 
     "title": "hello_world", 
    }, { 
     "number": "2", 
     "title": "hello_world", 
    } 
] 

Trước khi file đã có một phần tử gốc Tôi sẽ sử dụng:

Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class); 

mã nhưng tôi không thể nghĩ cách mã hóa lớp Wrapper làm phần tử gốc là một mảng.

Tôi đã cố gắng sử dụng:

Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class); 

với:

Nhưng đã không có bất kỳ may mắn. Làm thế nào khác tôi có thể đọc điều này bằng cách sử dụng phương pháp này?

Tái bút: Tôi đã có này để làm việc sử dụng:

JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine); 
String title = ((JsonObject)entries.get(0)).get("title"); 

Nhưng tôi muốn biết làm thế nào để làm điều đó (nếu có thể) với cả hai phương pháp.

+2

Bạn có chắc chắn có dấu phẩy sau các yếu tố tiêu đề? Nếu bạn loại bỏ chúng 'Wrapper [] dữ liệu = gson.fromJson (jElement, Wrapper []. Class);' hoạt động tốt cho tôi. – Pshemo

+0

Đó là vấn đề .. một sai lầm đơn giản như vậy! – Edd

Trả lời

88

Sự cố là do dấu phẩy sau phần tử cuối cùng của mảng (sau mỗi title). Nếu bạn gỡ bỏ nó và thay đổi dữ liệu của bạn để

[ 
    { 
     "number": "3", 
     "title": "hello_world" 
    }, { 
     "number": "2", 
     "title": "hello_world" 
    } 
] 

Wrapper[] data = gson.fromJson(jElement, Wrapper[].class); sẽ hoạt động tốt.

33
Gson gson = new Gson(); 
Wrapper[] arr = gson.fromJson(str, Wrapper[].class); 

class Wrapper{ 
    int number; 
    String title;  
} 

Dường như hoạt động tốt. Nhưng có thêm , Dấu phẩy trong chuỗi của bạn.

[ 
    { 
     "number" : "3", 
     "title" : "hello_world" 
    }, 
    { 
     "number" : "2", 
     "title" : "hello_world" 
    } 
] 
9
public static <T> List<T> toList(String json, Class<T> clazz) { 
    if (null == json) { 
     return null; 
    } 
    Gson gson = new Gson(); 
    return gson.fromJson(json, new TypeToken<T>(){}.getType()); 
} 

gọi mẫu:

List<Specifications> objects = GsonUtils.toList(products, Specifications.class); 
+2

Đối với tôi, điều này đang biến đối tượng của tôi thành Danh sách LinkedTreeMap thay vì một Danh sách các đối tượng Đặc tả (ví dụ). –

+0

Bạn học lớp GsonUtils ở đâu? –

+0

'' GsonUtils'' là lớp mà anh ta đặt phương thức '' toList() '' của riêng mình. – user1438038