异类Json Java的Json反序列化
提前道歉,我对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
{ 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();