【发布时间】:2015-09-12 07:47:06
【问题描述】:
我正在解析的 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 有效,因为我可以在“版本”中获取内容,但数据中的所有内容都是空的。
【问题讨论】:
-
你的日志是怎么说的?类转换异常?
-
日志没有说明任何错误,我有什么办法让它更详细吗?我已经将日志级别设置为完整。
-
嗯。没有例外?没有?您是否尝试过我发布的模型结构作为答案?
-
您对收到的 JSON 的结构有什么意见吗?因为看起来
into对象应该是键值对的映射,而不是示例中的数组。这样你就可以用你当前的实现来处理它。 -
@themarshal 不,我无法控制,我正在使用其他地方的 API。无论如何,如果您看下面,我解决了这个问题。
标签: java android json retrofit pojo