有没有办法使用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")
答案 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的映射,然后在需要时转换为相应的基元类型。
希望它有所帮助。