GSON中的动态JSON数据对象

时间:2015-01-16 01:03:34

标签: java android json api gson

我在使用GSON阅读我的API响应JSON时遇到了一些麻烦。

我的API数据返回一个带有状态代码,消息和数据对象的对象。

我与GSON的问题在于,我无法弄清楚如何正确使用它。

例如,我的API响应可能如下所示。

{
    "code": 200,
    "message": "",
    "data": {
        "auth_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "points": 42850
    }
}

{
    "code": 200,
    "message": "",
    "data": {
        "items": [
          {
            "title" : "value"
          },
          {
            "title" : "value"
          }
        ]
    }
}

或其他人

第一个响应是登录响应,它将是一个LoginResponse.class类

public class LoginResponse {

    private String auth_token;
    private int points;

    public String getAuthToken(){
        return auth_token;
    }

    public int getPoints(){
        return points;
    }

}

我要用

LoginResponse response = gson.fromJson(json, LoginResponse.class);

但是,我如何创建一个类,以便可以访问状态代码,消息和数据? (可能是我的任何响应类)

我看过TypeAdapterFactory和JsonDeserializer,但无法理解它。

所以,如果有人能找到回答这个问题的答案,那就太棒了,因为我找不到答案,或者你知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

您可以正常使用代码和消息,然后data可能是Map<String, Object>,您必须在运行时解释,具体取决于代码或用于区分响应应如何显示的任何内容

答案 1 :(得分:0)

您可以通过以下方式解决此问题:

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

JsonParser parser = new JsonParser();
JsonObject rootObejct = parser.parse(json).getAsJsonObject();
JsonElement dataElement = rootObejct.get("data");
LoginResponse response = gson.fromJson(dataElement, LoginResponse.class);