我有一个JSON响应,来自远程服务器,我真的希望我能得到帮助。
{
"data": {
"6111": {
"prereq": "0",
"mast": "The Master Tree"
},
"6112": {
"prereq": "1",
"mast": "Another Master Tree"
}
}
}
我使用GSON解析JSON,使用@SerializedName
和@Expose
将值获取到自定义模型中。但我不明白如何超越
" 6111" " 6112"
我已通过gson
标签检查了其他问题,但无济于事。
答案 0 :(得分:1)
试试这个
Iterator<String> iter = json.keys();
while (iter.hasNext()) {
String key = iter.next();
try {
Object value = json.get(key);
} catch (JSONException e) {
// Something went wrong!
}
}
///////////////////更新////////////////////
JSONObject issueObj = new JSONObject(jsonContent);
Iterator iterator = issueObj.keys();
while(iterator.hasNext()){
String key = (String)iterator.next();
JSONObject issue = issueObj.getJSONObject(key);
// get id from issue
String _pubKey = issue.optString("id");
}
答案 1 :(得分:1)
如果你正在使用Gson,那么每当你有一个你没有提前知道密钥的对象时,你可以使用Map
而不是自定义对象。
在这种情况下,Map
的每个元素都是一些“已知”数据结构,因此您可以使用Map<String, MyObject>
。
您的顶级课程:
public class MyResponse {
@SerializedName("data")
@Expose
private Map<String, MyObject> data;
...
}
你的地图的价值等级:
public class MyObject {
@SerializedName("prereq")
@Expose
private String prereq;
@SerializedName("mast")
@Expose
private String mast;
...
}
在您发布的json文本的特定情况下,您可以使用这样的对象:
response.getData().get("6111").getMast();
但你也可以做一些通常用Map
做的事情:
Map<String, MyObject> data = response.getData();
for (String key: data.keySet() {
...
}
for (MyObject obj : data.values()) {
...
}