如何使用Gson将动态对象解析为JSONObject

时间:2016-07-18 06:23:54

标签: json parsing gson jsonobject

有没有办法使用Gson将这样的JSON响应解析为下面的模型类?

{
    "id": 123,
    "phone": "123456789",
    "config": {
        "dynamicKey1": "true",
        "dynamicKey2": "123"
    }
}

模特课:

public class User {
    int id;
    String phone;
    JSONObject config;
}

config个对象中的键可能存在也可能不存在。 反序列化后,我希望能够使用user.getConfig().optBoolean("dynamicKey1")

之类的东西动态查询配置键

2 个答案:

答案 0 :(得分:1)

我最终做的是使用com.google.gson.JsonObject代替org.json.JSONObject。使用Gson中的JsonObject,反序列化工作完美,访问动态键如下所示:

user.getConfig().getAsJsonPrimitive("dynamicKey1").getAsBoolean()

答案 1 :(得分:0)

用户配置:

public class User {

int id;
String phone;
Map<String, String> config;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getPhone() {
    return phone;
}
public void setPhone(String phone) {
    this.phone = phone;
}
public Map<String, String> getConfig() {
    return config;
}
public void setConfig(Map<String, String> config) {
    this.config = config;
}

}

主类:

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String input = "{\"id\": 123,\"phone\": \"123456789\",\"config\": {\"dynamicKey1\": \"true\",\"dynamicKey2\": \"123\"}}";

    Gson gsonInstance = null;

    gsonInstance = new GsonBuilder().create();

    User user = gsonInstance.fromJson(input, User.class);

    boolean value = Boolean.parseBoolean(user.getConfig().get("dynamicKey1"));
    System.out.println(value);
}

您可以通过这种方式在Config部分创建DynamicKeys的映射,然后在需要时转换为相应的基元类型。

希望它有所帮助。