2013-08-24 205 views
85

我有一個JSON文件是這樣的:使用GSON解析JSON數組

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

之前文件時有一個根元素,我會用:

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

代碼,但我想不出如何編寫Wrapper類作爲根元素是一個數組。

我已經嘗試使用:

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

有:

但還沒有任何運氣。我怎麼才能使用這種方法讀取這個?

P.S我有這個利用工作:

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

但是我寧願知道如何使用這兩種方法做到這一點(如果可能)。

+2

你肯定有標題元素後,逗號?如果你刪除它們'Wrapper [] data = gson.fromJson(jElement,Wrapper []。class);'對我來說工作正常。 – Pshemo

+0

這就是問題..這麼簡單的錯誤! – Edd

回答

88

問題是由數組的最後一個元素後面的逗號引起的(每個title之後)。如果你刪除它,你的數據更改爲

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

Wrapper[] data = gson.fromJson(jElement, Wrapper[].class); 將正常工作。

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

class Wrapper{ 
    int number; 
    String title;  
} 

似乎工作正常。但是你的字符串中還有一個額外的,逗號。

[ 
    { 
     "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()); 
} 

調用示例:

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

對我來說,這是把我的對象變成一個LinkedTreeMap列表,而不是一個規範對象列表(例如)。 –

+0

你從哪裏獲得GsonUtils課程? –

+0

''GsonUtils''是他自己的''toList()''方法的類。 – user1438038