我想用这个json(上面一行)
向服务器发送一个http请求我希望得到这样一个json并将其解析为Java对象(下行)
我记得上次,我想要反序列化的集合中缺少字段
崩溃反序列化
(对于单个反序列化,如果json没有这样的字段 - 插入了默认值)
有什么方法可以创建一个Java类来表示请求json和响应json对象上的两个类型?
我的尝试:
public class ConfigValue {
public String key;
public String defaultValue;
public String value;
}
Gson gson = new Gson();
Type collectionType = new TypeToken<Array<ConfigValue>>() {
}.getType();
ConfigValue[] configValues = (ConfigValue[]) gson
.fromJson(result, collectionType);
答案 0 :(得分:0)
图像中的两个JSON字符串都不是ConfigValue对象的列表(或数组)。它们实际上是一个JSON对象,具有一个属性configValues
,它是一个ConfigValue对象列表。因此,您需要一个包装类来将它们反序列化为:
public class ConfigValues {
public ConfigValue[] configValues;
}
public class ConfigValue {
public String key;
public String defaultValue;
public String value;
}
public static void main(String[] args) {
String firstJson = "{\"configValues\":[{\"key\":\"radiusMeters\",\"value\":\"200\"}]}";
String secondJson = "{\"configValues\":[{\"key\":\"redeemExpirationMins\",\"defaultValue\":\"300\"},{\"key\":\"radiusMeters\",\"value\":\"200\",\"defaultValue\":\"400\"}]}";
Gson gson = new Gson();
ConfigValues firstConfigValues = gson.fromJson(firstJson, ConfigValues.class);
ConfigValues secondConfigValues = gson.fromJson(secondJson, ConfigValues.class);
System.out.println(firstConfigValues);
System.out.println(secondConfigValues);
}
如果将toString方法添加到这两个类,main方法将打印以下反序列化的对象:
ConfigValues(configValues = [ConfigValue(key = radiusMeters,defaultValue = null,value = 200)])
ConfigValues(configValues = [ConfigValue(key = redeemExpirationMins,defaultValue = 300,value = null),ConfigValue(key = radiusMeters,defaultValue = 400,value = 200)])
您可以看到ConfigValue的任何缺失字段都被反序列化为null。