使用Gson + Volley反序列化动态JSON密钥

时间:2014-05-02 09:15:48

标签: android json gson android-volley

我有一个带动态键值的JSON。例如:

"location_id": {
  "0": 0,
  "1": 1,
  "2404": "Section 9 Shah Alam - 3.085376,101.522716",
  "272": "Bukit Jelutong - 3.103953,101.527704",
  "545": "Giant Shah Alam - 3.084166,101.549152",
  ...
}

通常,我对固定键值的处理方法是在POJO类中定义它,如下所示:

JSON:

"location_id": {
  "id" : "hehe",
  "name": "herpderp",
  "location": "Section 9 Shah Alam - 3.085376,101.522716",
  ...
}
POJO将如下所示:

private String id;
private String name;
private String location;
...

通过使用GsonRequest,它会将JSON解析为POJO。

但是,如何反序列化具有动态键值的JSON?

2 个答案:

答案 0 :(得分:1)

如果您有动态键值,则需要手动解析JSON。 例如,执行一个简单的请求,然后在响应回调中解析数据。

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(final JSONObject response) {
            //get a fake property from response
            String title = response.optString("title");
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(final VolleyError error) {
            //handle errors
        }
    }
    ) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            //get request headers
        }
    };

答案 1 :(得分:0)

我明白了。感谢@Mattia回复。

我只需要Map<String, String>将整个键值对作为String。