我今天一直在使用GSON进行JSON解析,而且很多事情都很顺利,而且麻烦最少。
但是,对于以下JSON字符串,我开始遇到一些问题;
{"success":1,"response":{"dvds":{"IronMan":{"rating":"awesome"},"BatMan":{"rating":"awesome"},"Smurfs":{"rating":"childish"}}}}
在这个JSON中,我有一个包含响应类型集合的集合“response”。在示例中,唯一包含的响应类型是dvds。 但我的问题在于此;我希望将“dvds”的每个子节点解析为List响应,每个子节点都是一个Dvd类对象(包含字符串“title”和字符串“rating”)
到目前为止,解析单独的值/对象和解析数组并没有真正的问题,但我无法解决如何解决这些集合的问题。
谷歌今天继续引用我的“TypeTokens”但是看了关于这个问题的各种主题的代码,我仍然没有理解如何为我的使用场景实现它。所以,具体而言; “我怎样才能让GSON正确识别我的响应类型和DVD集合?”
目前我的ResponseData.class看起来像这样:
public class ResponseData {
public int success;
public List<ResponseTypes> responsetypes;
public class ResponseType{
public List<Dvd> Dvds;
}
public class Dvd{
public String title;
public String rating;
}
}
这就是我在基于数组的形式中看待这个问题的方法,但是这次我需要在我遇到对象集合的情况下应用它。在所有情况下,我都可以想到对象的类应该能够通过它的父级名称来识别。
目前,解析按以下方式启动;
try{
Gson gson = new Gson();
Reader reader = new InputStreamReader(stream);
ResponseData responsedata = gson.fromJson(reader, ResponseData.class);
return responsedata;
}
我真的希望有人可以帮助我!谢谢!
答案 0 :(得分:1)
你有一些问题:
ResponseData
应该包含List<ResponseType>
而不是List<ResponseTypes>
您提供的json与上面的类不匹配。 这个json的准确类是:
public class ResponseData
{
public int success;
public Map<String, Map<String, Dvd>> response;
public class Dvd
{
public String rating;
}
}
为了描述json中的列表,你应该使用:“[]”。例如:[1,2,3]。你可以阅读更多关于json here
如果您希望json描述您在上面描述的类层次结构。它应该看起来像:
{“成功”:1,“responseTypes”:[{“Dvds”:[{“title”:“IronMan”,“rating”:“awesome”},{“title”:“BatMan”,“rating “:”awesome“},{”title“:”蓝精灵“,”评分“:”幼稚“}}}]}
请注意,除非您声明变量名称和json变量名称之间的映射,否则应使用相同的名称。例如“Dvds”和“responseTypes”