2
解析兩個不同的JSON響應時出現問題。不同的JSON數組響應
1:這是JSON響應我從一個RESTful API獲取:
{
"gear": [
{
"idGear": "1",
"name": "Nosilec za kolesa",
"year": "2005",
"price": "777.0"
}, {
"idGear": "2",
"name": "Stresni nosilci",
"year": "1983",
"price": "40.0"
}
]
}
2:這種反應,我從我的測試客戶端獲取。我在列表中添加了一些值,然後使用gson.toJson
來測試輸出。
[
{
"idGear": "1",
"name": "lala",
"year": 2000,
"price": 15.0
}, {
"idGear": "2",
"name": "lala2",
"year": 2000,
"price": 125.0
}
]
他們都是有效的,但第二個成功反序列化到對象是這樣的:
Type listType = new TypeToken<List<Gear>>() {}.getType();
List<Gear> gears= (List<Gear>) gson.fromJson(json, listType);
有了第一個,我試圖反序列化方式相同,但我得到的錯誤。
編輯
API方法:
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Gear> getGear() {
List<Gear> gears = gearDAO.getGears();
if (!gears.isEmpty()) {
return gears;
} else
throw new RuntimeException("No gears");
}
CLIENT序列化代碼:
List<Gear> list = new ArrayList<Gear>();
Gear o = new Gear();
o.setPrice(15);
o.setYear(2000);
o.setName("asds");
Type listTypes = new TypeToken<List<Gear>>() {}.getType();
gson.toJson(list, listTypes);
restful api和testClient都返回'List',但響應不同。我不知道爲什麼? –
2013-05-13 11:43:51
那麼,正如我所說的,API不僅僅是返回一個'List' ...它返回一個包含一個List的對象。實際上,它返回的具體數據類型是一個'Map',但不是'List '......我假設這個API不受你控制,對吧?通常情況下,REST API以這種方式返回數據,總是包含在一個帶有「'response」字段的對象中(在你的情況下爲「gears」)或類似的東西... –
MikO
2013-05-13 11:51:06
API是我的,它正在返回列表,所以這就是爲什麼我困惑。 –
2013-05-13 12:34:54