首页 > 解决方案 > 如何将 Json 反序列化为 Map 的 Map?

问题描述

我想将 json 反序列化为

Map<String, Map<String, String>

这是我要转换的 json 结构。

{
     "filetype": {
        "cell": "value"
     },
     "fileType2": {
        "cell2": "value2"}
 }

Map<String, Map<String, String>我尝试使用类型创建一个类并ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)在杰克逊中尝试:

class MapOfMap {
    Map<String, Map<String, String>> mapOfMap;
    //getter and setter
}
objectMapper.readValue(
                new File(this.getClass()
                        .getClassLoader()
                        .getResource("configs/sample.json").getFile()),
                MapOfMap.class
        )

我收到此错误:

无法识别的字段“fileType”。

有没有办法做到这一点?

标签: javajsonjackson

解决方案


您不必围绕您的地图编写包装类。只需告诉 Mapper 你想要一个地图:

    String jsonString = "{\n" + 
            "     \"filetype\": {\n" + 
            "        \"cell\": \"value\"\n" + 
            "     },\n" + 
            "     \"fileType2\": {\n" + 
            "        \"cell2\": \"value2\"}\n" + 
            " }";

    Map<String, Map<String, String>> map;
    ObjectMapper mapper = new ObjectMapper();

    try {
        map = mapper.readValue(
            jsonString,
            new TypeReference<Map<String, Map<String, String>>>(){}
        );
        System.out.println(map);
    } catch (Exception e) {
        e.printStackTrace();
    }

它打印:{filetype={cell=value}, fileType2={cell2=value2}},看起来像你想要的。

供参考:这个


推荐阅读