【发布时间】:2013-10-10 14:58:41
【问题描述】:
我今天一直在与使用 GSON 进行 JSON 解析作斗争,很多事情都很顺利,而且麻烦最少。
不过,对于以下 JSON 字符串,我开始遇到一些问题;
{"success":1,"response":{"dvds":{"IronMan":{"rating":"awesome"},"BatMan":{"rating":"awesome"},"Smurfs":{"rating":"childish"}}}}
在这个 JSON 中,我有一个包含响应类型集合的“响应”集合。在示例中,唯一包含的响应类型是 dvds。 但我的问题就在这里;我希望将“dvds”的每个子项解析为一个 List 响应,每个子项都是一个 Dvd 类对象(包含一个字符串“title”和一个字符串“rating”)
到目前为止,解析单独的值/对象和解析数组并没有真正的问题,但我不知道如何解决解析此类集合的问题。
今天谷歌搜索一直引用我“TypeTokens”,但查看有关此问题的各种主题中的代码,我仍然不明白如何为我的使用场景实现它。
所以,具体一点; “如何让 GSON 正确识别我的 responsetype 和 dvd-collections?”
目前我的 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;
}
}
这就是我以基于数组的形式看待这个问题的方式,但这次我需要在遇到对象集合的情况下应用它。在所有情况下,我都认为对象的 Class 应该能够通过其父级的名称来识别。
目前启动解析如下;
try{
Gson gson = new Gson();
Reader reader = new InputStreamReader(stream);
ResponseData responsedata = gson.fromJson(reader, ResponseData.class);
return responsedata;
}
我真的希望有人可以帮助我!谢谢!
【问题讨论】:
-
该代码甚至可以编译吗?我们不能将公共类嵌套在另一个类中。
-
你得到答案了吗?
-
不,遗憾的是,我在与我遇到的相同层次结构中创建了一个示例 JSON 字符串,但是我没有提供这个 JSON。最后,我最终在我自己的网络服务器上构建了一个小型 .php 页面,该页面将 JSON 转换为另一种格式(最后还剥离了一些我没有全部使用的数据),因此我可以将它直接插入到我自己的函数中。在这种情况下,JSON 答案也从大约 600Kb 减少到大约 180Kb。所以这是有利可图的:)
-
此外,我还在 PHP 中创建了两个小子函数,它们将在需要的地方以少量的方式获取额外的 JSON 数据(已从主答案中剥离)(在最后一次获取时将完整的 JSON 答案缓存为我将只在一个选定的小组中使用该应用程序,因此几乎不会占用任何磁盘空间,因为它仅适用于 18 个左右的客户端 ID)
标签: java json parsing collections gson