将数字解析为对象

时间:2018-02-02 13:43:24

标签: java android json gson

我有一个JSON响应,来自远程服务器,我真的希望我能得到帮助。

{
  "data": {
    "6111": {
      "prereq": "0",
      "mast": "The Master Tree"
    },
    "6112": {
      "prereq": "1",
      "mast": "Another Master Tree"
    }
  }
}

我使用GSON解析JSON,使用@SerializedName@Expose将值获取到自定义模型中。但我不明白如何超越

  

" 6111"   " 6112"

我已通过gson标签检查了其他问题,但无济于事。

2 个答案:

答案 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()) {
    ...
}