Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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
异类Json Java的Json反序列化_Java_Json_Gson_Json Deserialization - Fatal编程技术网

异类Json Java的Json反序列化

异类Json Java的Json反序列化,java,json,gson,json-deserialization,Java,Json,Gson,Json Deserialization,提前道歉,我对JSON解析有点陌生,在java中解析对象中的JSON时遇到了一个问题 { result: { "City": { "Delhi": { "A-Hospital": { "pincode": 400001 }, "B-Hospital": { &qu

提前道歉,我对JSON解析有点陌生,在java中解析对象中的JSON时遇到了一个问题

{ result: {
      "City": {
        "Delhi": {
          "A-Hospital": {
            "pincode": 400001
          },
          "B-Hospital": {
            "pincode": 400002
          },
          "C-Hospital": {
            "pincode": 400003
          },
          .
          .
          .
        },
        "Mumbai": {
          "A-Hospital": {
            "pincode": 500001
          },
          "B-Hospital": {
            "pincode": 500002
          },
          "C-Hospital": {
            "pincode": 500003
          },
          .
          .
          .
        },
        "Bangalore": {
          "A-Hospital": {
            "pincode": 600001
          },
          "B-Hospital": {
            "pincode": 600002
          },
          "C-Hospital": {
            "pincode": 600003
          },
          "D-Hospital": {
            "pincode": 600004
          },
          .
          .
          .
        }
      }
     }
    }
接收Json是从第三方接收的,因此无法更改格式。 如何为这种动态json创建类结构并解析为对象

class City{
  private Map<String, Map<String,Hospital>> hours;
//Getter and Setter
}

class Hospital {
    private String pincode;
    //Getter and Setter
}
但城市并没有包含任何数据

Result:
cities{pincode=null}

已编辑,因为您在JSON中添加了
结果
。编辑后,您的问题是您声明的
City
不包含,但它本身
Map

首先,您需要一个“包装器”类,比如说
Data
。这是因为您的JSON示例有一个包含
Response
的对象,该对象包含
City
对于
城市
,没有固定的字段名,因此需要将其反序列化为
地图

这同样适用于地图
城市中的值。
City
中的值也是
Map
的类型让我们称这些值为内部Map。因为有一个固定的字段名
pincode
,所以您可以在该内部映射中将前面提到的值声明为
Hospital
类型,从而生成如下类:

@Getter @Setter
public class Data {
    @Getter @Setter
    public class Result {
        private Map<String, Map<String, Hospital>> City;
        @Getter @Setter
        public class Hospital {
            private String pincode;
        }
    }
    private Result result;
}
@Getter@Setter
公共类数据{
@Getter@Setter
公开课成绩{
私人地图城市;
@Getter@Setter
公立医院{
私有字符串pincode;
}
}
私人结果;
}
现在,如果您使用上述类与Gson进行反序列化,您可以像这样使用它:

Data data = gson.fromJson(JSON, Data.class);
Map<String, Map<String, Hospital>> city = data.getResult().getCity();
Data Data=gson.fromJson(JSON,Data.class);
地图城市=data.getResult().getCity();
并获得
400002


您可以实现一些或多或少复杂的自定义反序列化程序,但反序列化JSON可能更容易,在tath之后,如果需要,可以进行一些到其他类型类的映射。

我想以Hospital(a-Hospital、B-Hospital等)为对象形成城市地图。示例:地图城市医院地图。class Hospital{String HospitalName;Integer pincode;}请回答问题并更新更多详细信息,而不是发表评论。
Data data = gson.fromJson(JSON, Data.class);
Map<String, Map<String, Hospital>> city = data.getResult().getCity();