Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GSON将JSON嵌套对象解析为Java POJO_Java_Json_Gson - Fatal编程技术网

使用GSON将JSON嵌套对象解析为Java POJO

使用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" }

我想将带有嵌套数组的JSON字符串解析为带有Gson的POJO,但它似乎不起作用

我的JSON字符串如下所示:

{
   "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()