使用Gson解析没有名称的Json数组和对象

Muh*_*ied 8 java android json gson

我知道有许多带有GSON问题的JSON,但它们都不直接与我有关.我的JSON格式不同.

我有一个我想用GSON解析的JSON数据,如下所示:

[
   {
    "foo":"1",
    "bar":[ { "_id":"bar1"} ],
    "too":["mall", "park"]
   }
]
Run Code Online (Sandbox Code Playgroud)

我有模型类:

ItemArray类

public class ItemArray
{
   List<Item> itemArray;

   //Get set here
}
Run Code Online (Sandbox Code Playgroud)

物品等级

public class Item
{
   String foo;
   List<Bar> bar;
   List<String> too;

   //Get set here
}
Run Code Online (Sandbox Code Playgroud)

酒吧类

public class Bar
{
   String id;

   //Get set here
}
Run Code Online (Sandbox Code Playgroud)

这是一个问题.JSON的格式是否正确?如果是这样,模型类的格式是否正确?

如果没有,请把我推向正确的方向.先感谢您!

PS.如果需要,我可以修改JSON数据格式.

Sni*_*las 7

根据你的json,你应该简单地:

public class ItemArray extends List<Item> {
}
Run Code Online (Sandbox Code Playgroud)

如果你想保留java类并更改你的json应该是:

{
 itemArray: [
     {
      "foo":"1",
      "bar":[ { "_id":"bar1"} ],
      "too":["mall", "park"]
     }
  ]
}
Run Code Online (Sandbox Code Playgroud)

哦,和Bar的id和_id不匹配:

public class Bar
{
   String _id;

   //Get set here
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用注释在Json de/serialization期间更改字段的名称.

最后但并非最不重要的是,考虑更好地输入您的值.如果没有看到任何数据作为字符串,你将不会在java代码中进行大量处理来转换东西.例如 :

"foo" : 1,
Run Code Online (Sandbox Code Playgroud)

并将foo视为int数据成员,而不是String.


Bha*_*esh 6

有时我们会得到JsonArray [ {..} , {..} ]一个回复(没有'itemArray'你的名字)在这种情况下你可以使用下面的代码

Type fooType = new TypeToken<ArrayList<Item>>() {}.getType();
List<Item> array = new Gson().fromJson(response, fooType);
Run Code Online (Sandbox Code Playgroud)

了解更多关于此官方文档 - Gson数组 - 示例