[英]Using Gson to parse Json array and object with no name
我知道有許多帶有GSON問題的JSON,但它們都不直接與我有關。 我的JSON格式不同。
我有一個我想用GSON解析的JSON數據,如下所示:
[
{
"foo":"1",
"bar":[ { "_id":"bar1"} ],
"too":["mall", "park"]
}
]
我有模型類:
ItemArray類
public class ItemArray
{
List<Item> itemArray;
//Get set here
}
物品等級
public class Item
{
String foo;
List<Bar> bar;
List<String> too;
//Get set here
}
酒吧類
public class Bar
{
String id;
//Get set here
}
這是一個問題。 JSON的格式是否正確? 如果是這樣,模型類的格式是否正確?
如果沒有,請把我推向正確的方向。 先感謝您!
PS。 如果需要,我可以修改JSON數據格式。
根據你的json,你應該簡單地:
public class ItemArray extends List<Item> {
}
如果你想保留java類並更改你的json應該是:
{
itemArray: [
{
"foo":"1",
"bar":[ { "_id":"bar1"} ],
"too":["mall", "park"]
}
]
}
哦,和Bar的id和_id不匹配:
public class Bar
{
String _id;
//Get set here
}
您還可以使用注釋在Json de / serialization期間更改字段的名稱。
最后但並非最不重要的是,考慮更好地輸入您的值。 如果沒有看到任何數據作為字符串,你不會在java代碼中進行很多處理來轉換東西。 例如 :
"foo" : 1,
並將foo視為int數據成員,而不是String。
有時我們得到JsonArray [ {..} , {..} ]
作為回應(沒有像你的'itemArray'
這樣'itemArray'
名字)在這種情況下你可以使用下面的代碼
Type fooType = new TypeToken<ArrayList<Item>>() {}.getType();
List<Item> array = new Gson().fromJson(response, fooType);
了解更多關於此官方文檔 - Gson數組 - 示例
如果你有一個類似[ {..} , {..} ]
的JsonArray
[ {..} , {..} ]
你可以用Gson做到這一點:
Item[] items = gson.fromJson(json, Item[].class);
要檢查Json是否有效,請使用此工具http://jsonlint.com/
Class Bar(
private String _id;
//create getter/setters
{
public class Item
{
String foo;
List<Bar> bar;
List<String> too;
//Get set here
}
//this is also fine
public class ItemList
{
List<Item> itemArray;
//Get set here
}
你命名的項目列表“itemArray”,但在你的json中你還沒有命名相應的項目數組“itemArray”。 所以把它變成itemArray,問題不在你的json中,它是有效的。 問題在於其對Gson的Gson映射關鍵字,對象的變量(即Java POJO)具有相同的名稱。 如果列表的名稱是Class is
List<Item> itemArray;
那么相應的json數組名也應該是itemArray,看一下
{
itemArray: [
{
"foo":"1",
"bar":[ { "_id":"bar1"} ],
"too":["mall", "park"]
}
]
}
所以你可以將json轉換成這樣的對象
Reader reader = new InputStreamReader(IOUtils.toInputStream(json_string));
ItemList itemList = json.toObject(reader, ItemList.class);
深入了解詳細信息, 請訪問https://stackoverflow.com/questions/13625206/how-to-parse-the-result-in-java/13625567#13625567
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.