簡體   English   中英

使用Gson解析沒有名稱的Json數組和對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM