我想将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”。


有什么办法吗?

最佳答案

您不必在地图周围编写包装类。只需告诉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}},看起来像您想要的。

供参考:this

09-17 05:21