提前道歉,我对JSON解析有点陌生,我在java中解析Object中的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创建类结构并解析为Object?
class City{
private Map<String, Map<String,Hospital>> hours;
//Getter and Setter
}
class Hospital {
private String pincode;
//Getter and Setter
}
我想以医院(A医院、B医院等)为对象制作城市Map。例如:Map〈字符串,医院〉城市医院Map。class医院{字符串医院名称;整数密码;}
但是如何编写解串器?尝试
JsonObject allcities = (JsonObject) json.get("result");
City cities = new Gson().fromJson(allcities,City.class);
但是城市并不包含任何数据。
Result:
cities{pincode=null}
1条答案
按热度按时间vatpfxk51#
已编辑,因为您在JSON中添加了
result
。此处的问题(编辑后)是,您声明的City
不包含,但它本身是Map<String, Map<String,Hospital>>
。首先,需要一个“ Package 器”类,比如
Data
,因为JSON示例中有一个包含Response
的对象,而Response
又包含City
。对于City
,没有固定的字段名,因此需要将其反序列化为Map
。这同样适用于Map
City
中的值。City
中的值也是Map
的类型让我们称这些值为内部Map。因为有一个固定的字段名pincode
,所以您可以在此内部Map中将前面提到的值声明为Hospital
类型,从而生成如下所示的类:现在,如果您使用Gson反序列化上面的类,您可以像这样使用它:
得到
400002
。您可以实现一些或多或少复杂的自定义反序列化器,但如果需要,反序列化JSON并在此之后Map到其他类型的类可能会更容易。