[英]Java Jackson Deserialization
我努力寻找使用fasterxml.jackson将以下结构反序列化为java对象的方法。
显然“NewYork”和“Boston”是键,而不是我必须解组到映射中的模式
Map<String, Object> jsonMap = mapper.readValue(jsonString,
new TypeReference<Map<String,Object>>(){});
但是jsonMap返回的是LinkedHashMap,key是“NewYork”,value是另一个LinkedHashMap。 在第二个内部映射中,key 是“schedules”,value 是 LinkedHashMap 的列表。 第三个内图,key,value分别是“date”:“2020-10-31”,“flightNo”:“UA110”,“depart”:“17:30PM”
我想要的是这样的java模型
public class FlightInfo {
Map<String, List<Schedule>> info;
}
搜索了一下,想到了JsonNode,Json节点肯定知道属性名,就我而言,NewYork和Boston都没有确定。
我找不到办法做到这一点。
{
"NewYork": {
"schedules": [
{
"date": "2020-10-31",
"flightNo": "UA110",
"depart": "17:30PM"
},
{
"date": "2020-11-01",
"flightNo": "UA230",
"depart": "18:30PM"
}
]
},
"Boston": {
"schedules": [
{
"date": "2020-11-01",
"flightNo": "AM110",
"depart": "08:00AM"
},
{
"date": "2020-11-01",
"flightNo": "CA230",
"depart": "10:30AM"
}
]
}
}
谢谢
JSON 字符串不适合您预期的数据模型Map<String,Object>
或Map<String, List<Schedule>>
。 实际上有两个级别的映射, NewYork -> schedules -> List Of Schedule
所以我们应该使用下面的 TypeReference 和二级 Map 来做反序列化
mapper.readValue(jsonString, new TypeReference<Map<String, Map<String, List<Schedule>>>>(){});
当然,如果你坚持使用一级映射,你可以修改数据,如下所示。 因此我们可以使用一个简单的版本TypeReference<Map<String, List<Schedule>>>
{
"NewYork": [
{
"date": "2020-10-31",
"flightNo": "UA110",
"depart": "17:30PM"
},
{
"date": "2020-11-01",
"flightNo": "UA230",
"depart": "18:30PM"
}
],
"Boston": [
{
"date": "2020-11-01",
"flightNo": "AM110",
"depart": "08:00AM"
},
{
"date": "2020-11-01",
"flightNo": "CA230",
"depart": "10:30AM"
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.