[英]Using Jackson to deserialize JSON to Map
我试图找到一种简单的方法将以下 JSON 反序列化为 OpeningHours 对象,其中包含Map<String, List<String>>
,其中包含日期作为键和开放时间作为列表。
我正在使用 Jackson 并创建了我自己的反序列化器@JsonDeserialize(using = MyDeserializer.class)
问题是我需要检查存在哪些不同的 JSON 节点来设置地图的键。
有没有简单的替代解决方案?
{
"OpeningHours": {
"Days": {
"Monday": {
"string": [
"09:00-13:00",
"13:30-18:00"
]
},
"Tuesday": {
"string": [
"09:00-13:00",
"13:30-18:00"
]
}
}
}
}
您可以将其反序列化为表示 JSON 的数据结构,例如
@Data
public class TempStore {
private List<DayTempStore> days;
}
@Data
public class DaytempStore {
private String[] string;
}
并将其转换为 Map> 将节点和检查的麻烦留给 Jackson。
Jackson 可以将任何 Json 反序列化为Map<String, Object>
,其中可能包含嵌套 json 对象的嵌套映射。 所需要的只是铸造:
String json = ...
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> openingHours = (Map<String, Object>)mapper.readValue(json, Map.class);
Map<String, List<String>> days = (Map<String, List<String>>)((Map<String, Object>)openingHours.get("OpeningHours")).get("Days");
System.out.println(days);
输出:
{Monday={string=[09:00-13:00, 13:30-18:00]}, Tuesday={string=[09:00-13:00, 13:30-18:00]}}
我认为您正在使问题比实际情况要复杂一些。 在这种情况下,您不需要自定义解串器。 你只需要这个:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModules(new JavaTimeModule());
ObjectReader obrecjReader = objectMapper.reader();
Map<String, Object> myMap = objectReader.forType(Map<String,Object>.class).readValue(jsonString);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.