9

我知道有很多带有 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 数据格式。

4

4 回答 4

8

根据您的 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 反序列化期间使用注释来更改字段的名称。

最后但并非最不重要的一点是,考虑更好地键入您的值。如果不是,不要将任何数据视为字符串,您将不会在 java 代码中进行大量处理来转换事物。例如 :

"foo" : 1,

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

于 2012-12-06T02:52:48.360 回答
7

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

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

查找有关此官方文档的更多信息 - Gson Array-Examples

于 2015-04-28T05:10:18.360 回答
2

如果你JsonArray喜欢[ {..} , {..} ],你可以用 Gson 做到这一点:

Item[] items = gson.fromJson(json, Item[].class);
于 2015-06-19T05:19:31.500 回答
0

要检查 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 的表示,json 的 Gson 映射键在具有相同名称的对象(即 Java POJO)的变量上。如果您的列表名称是 Class 是

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

于 2012-12-06T04:06:34.063 回答