繁体   English   中英

使用 Jackson 将 JSON 反序列化为 Map

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM