我知道有许多带有GSON问题的JSON,但没有一个直接与我有关。我的JSON格式不同。
我想要使用GSON解析JSON数据,如下所示:
[
{
"foo":"1",
"bar":[ { "_id":"bar1"} ],
"too":["mall", "park"]
}
]
我有模型Classes:
ItemArray Class
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数据格式。
答案 0 :(得分:7)
根据你的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。
答案 1 :(得分:6)
有时我们会将JsonArray [ {..} , {..} ]
作为回复(没有像您这样的'itemArray'
名称)
在这种情况下,您可以使用以下代码
Type fooType = new TypeToken<ArrayList<Item>>() {}.getType();
List<Item> array = new Gson().fromJson(response, fooType);
答案 2 :(得分:2)
如果您有JsonArray
[ {..} , {..} ]
,则可以使用Gson执行此操作:
Item[] items = gson.fromJson(json, Item[].class);
答案 3 :(得分: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的代表中, Gson将json映射到具有相同名称的对象变量(即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