我正在解析的JSON看起来像这样:
{ "version": 1
"data": {
"1001": {
"id": 1001,
"name": "herp",
"into": [
"3111": "we"
]
},
"1032": {
"id": 1002,
"name": "derp",
"into": [
"36": "w",
"12341: "c"
],
"tags": [
"hi there"
],
"cost" {
"even": 15
}
},
"1603": {
"id": 1003,
"name": "her",
"into": [
"37": "dll",
"58": "eow",
"32145": "3a"
],
"cost" {
"highest": 325
"lowest": 100
}
},
.... Even more data
}
“数据”中的Json会持续一段时间,并且没有设置端点。我无法控制Json,我只是想读它。不幸的是,使用我的类代码我无法让它工作。当我进行改装调用时,“数据”中的信息为空。
我已经尝试了很多迭代来实现这一点,包括使用反序列化器并重构我的POJO代码。这是我的Data类的当前状态:
public class Data {
private Map<String, Item> itemData;
// Relevant Getters, Setters and Constructors //
}
对于我的项目类,主要问题是未设置JSON内容,它可能会有所不同。正如您在上面看到的那样,“into”中的值会发生变化,有时项目中的内容也会发生变化,例如“tags”或“cost”:
public class Item {
private int id;
private String name;
private String group;
private String description;
private Map<String, String> into;
private List<String> tags;
private Map<String, Integer> cost;
// Relevant Getters, Setters and Constructors //
当我使用这段代码时,我的数据类是空的,我没有在日志中看到任何错误,所以我似乎无法弄清楚为什么GSON没有使用它。
如果你想看看我如何构建我的RestClient,这里是:
RestAdapter.Builder builder = new RestAdapter.Builder()
.setEndpoint(ROOT)
.setClient(new OkClient(new OkHttpClient()))
.setLogLevel(RestAdapter.LogLevel.FULL);
RestAdapter restAdapter = builder.build();
REST_CLIENT = restAdapter.create(DataApi.class);
我知道我的Rest Query有效,因为我可以在“version”中获取内容,但数据中的所有内容都是null。
答案 0 :(得分:1)
我正式是一个愚蠢的修补程序,并完全查看了最简单的修复方法,并且应该撤销我的帐户和开发者名称。
这就是我应该做的一切:
public class ItemGroup {
private String version;
private Map<String,Item> data;
//...Man i'm so dumb...
}
作为未来的参考。这有效的原因是因为JSON采用这种格式{{} {} {}}。这意味着您有3个对象对象,而不是{[] [] []},它是列表的3个对象。我所做的是将{{} {} {}}视为{{{} {} {}}}。哪个不对。通过使用基本上是对的集合的地图,我们可以使用地图模仿{{} {} {}}。
地图对象{{密钥对对象} {密钥对对象} {密钥对对象}}
答案 1 :(得分:0)
快速了解您的Pojos: 不确定这是否有效。也许写一个自定义的反序列化器。
public class YourResponse {
int version;
Data data;
class Data {
Subdata subData;
}
class Subdata {
private int id;
private String name;
private ArrayList<Into> into;
private ArrayList<String> tags;
//...
}
class Into {
// "3111": "we"
private String into;
}
}