java - 如何将 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”。
有没有办法做到这一点?
解决方案
您不必围绕您的地图编写包装类。只需告诉 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}}
,看起来像你想要的。
供参考:这个
推荐阅读
- javascript - 使用全局变量更新所有对象值
- python - 结合 asyncio 和 aiohttp 时出现“RuntimeError: This event loop is already running”
- c - 在 C 中调用 void 函数后如何存储用户输入?
- c# - 我可以使用 SQL 连接到 Salesforce 吗?
- delphi - 代码没有在整个文本文件中运行
- python - 如何在 python 上显示斐波那契递归树
- python - Python append element with for ... in 会导致无限循环,但不会 for ... range
- python - 选择与字符串完全匹配的行包含
- c# - C# WINFORM 控制调整大小和加载问题
- c# - 使用复合键添加记录在 ef 核心中失败 NOT NULL 约束