繁体   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