使用GSON将JSON嵌套对象解析为Java POJO
我想将带有嵌套数组的JSON字符串解析为带有Gson的POJO,但它似乎不起作用 我的JSON字符串如下所示:使用GSON将JSON嵌套对象解析为Java POJO,java,json,gson,Java,Json,Gson,我想将带有嵌套数组的JSON字符串解析为带有Gson的POJO,但它似乎不起作用 我的JSON字符串如下所示: { "magdeburg":{ "average":"21.40", "maximum":"22.33", "minimum":"19.06" }, "frankfurt":{ "average":"16.41", "maximum":"16.57", "minimum":"16.09" }
{
"magdeburg":{
"average":"21.40",
"maximum":"22.33",
"minimum":"19.06"
},
"frankfurt":{
"average":"16.41",
"maximum":"16.57",
"minimum":"16.09"
}
}
public class PingResult {
public double average;
public double maximum;
public double minimum;
public PingResult(double average, double maximum, double minimum) {
this.average= average;
this.maximum = maximum;
this.minimum= minimum;
}
public String toString() {
return "average:" + this.average + ",maximum:"+this.maximum+",minimum:"+this.minimum;
}
}
我的POJO课程如下:
{
"magdeburg":{
"average":"21.40",
"maximum":"22.33",
"minimum":"19.06"
},
"frankfurt":{
"average":"16.41",
"maximum":"16.57",
"minimum":"16.09"
}
}
public class PingResult {
public double average;
public double maximum;
public double minimum;
public PingResult(double average, double maximum, double minimum) {
this.average= average;
this.maximum = maximum;
this.minimum= minimum;
}
public String toString() {
return "average:" + this.average + ",maximum:"+this.maximum+",minimum:"+this.minimum;
}
}
但当我想用如下代码将其解析为POJO时:
List<PingResult> pr = (List<PingResult>) gson.fromJson(q, PingResult.class);
for(PingResult p:pr) {
System.out.println(p.toString());
}
List pr=(List)gson.fromJson(q,PingResult.class);
对于(PingResult p:pr){
System.out.println(p.toString());
}
它给出了错误的解释
java.lang.ClassCastException:PingResult无法强制转换为
java.util.List位于
main(DelayBasedMeasurement.java:380)
我已经尝试解析到PingResult[],但仍然不起作用
有什么建议吗?首先,gson.fromJson(q,PingResult.class)
不会返回列表,只返回单个对象。您需要使用TypeToken
其次,您没有JSON对象列表,而是有一个映射。没有[]
字符,每个ping结果都是城市字符串键的值
尝试将TreeMap
作为反序列化类型
Type pingType = new TypeToken<TreeMap<String, PingResult>>(){}.getType();
TreeMap<String, PingResult> pingMap = gson.fromJson(json, pingType);
Type pingType=new-TypeToken(){}.getType();
TreeMap pingMap=gson.fromJson(json,pingType);
首先,gson.fromJson(q,PingResult.class)
不会返回列表,只返回单个对象。您需要使用TypeToken
其次,您没有JSON对象列表,而是有一个映射。没有[]
字符,每个ping结果都是城市字符串键的值
尝试将TreeMap
作为反序列化类型
Type pingType = new TypeToken<TreeMap<String, PingResult>>(){}.getType();
TreeMap<String, PingResult> pingMap = gson.fromJson(json, pingType);
Type pingType=new-TypeToken(){}.getType();
TreeMap pingMap=gson.fromJson(json,pingType);
不确定如何使用列表
,但这是如何使用地图
:
Map Map=gson.fromJson(json,newTypeToken(){}.getType());
然后,如果需要所有值,您可以只使用
map.values()
。不确定如何使用列表执行此操作,但这是使用map
执行此操作的方法:
Map Map=gson.fromJson(json,newTypeToken(){}.getType());
然后,如果需要所有值,您只需map.values()