我想用Gson将带有嵌套数组的JSON字符串解析为POJO,但似乎不起作用。
我的JSON字符串如下:
{
"magdeburg":{
"average":"21.40",
"maximum":"22.33",
"minimum":"19.06"
},
"frankfurt":{
"average":"16.41",
"maximum":"16.57",
"minimum":"16.09"
}
}
我的POJO类如下:
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());
}
给出了
的错误java.lang.ClassCastException:无法将PingResult强制转换为 java.util.List位于 DelayBasedMeasurement.main(DelayBasedMeasurement.java:380)。
我尝试解析为PingResult [],但仍然无法正常工作。
有什么建议吗?
答案 0 :(得分:1)
首先,gson.fromJson(q, PingResult.class)
不会返回列表,而只会返回单个对象。您需要使用TypeToken
。
第二,您没有JSON对象的列表,但有一个映射。没有[]
字符,并且每个ping结果都是城市字符串键的值。
尝试使用TreeMap<String, PingResult>
作为反序列化类型
Type pingType = new TypeToken<TreeMap<String, PingResult>>(){}.getType();
TreeMap<String, PingResult> pingMap = gson.fromJson(json, pingType);
答案 1 :(得分:1)
不确定如何使用production
来做到这一点,但这是如何使用List
来做到这一点:
Map
如果您需要所有值,则只需Map<String, Ping> map = gson.fromJson(json, new TypeToken<Map<String, Ping>>(){}.getType());
。