我一直在使用Jackson来解析json文件并将属性和值加载到Map中。这基本上就是我的代码:
Map<String, String> map = new HashMap<String, String>();
ObjectMapper mapper = new ObjectMapper();
File file = new File(pathToSource);
map = mapper.readValue(file, new TypeReference<HashMap<String, String>>() {});
这适用于平面json文件,其中键是平的,只包含属性/值对。
{
"attr":"value"
"attr":"value"
...
}
现在,我的一个来源已经开始将一个密钥放在另一个密钥中,并且当它到达内部密钥时,readValue方法会发挥作用。
{ "key1":{
"attr":"value"
"attr":"value"
"key2":{
"attr":"value"
"attr":"value"
}
}
}
我需要的一个警告是我想要捕获属性名称和值。如果我更细致地解析json,逐个获取属性,我就无法访问属性名称。
我现在一直在看这个并且找不到正确的组合来解析密钥,同时捕获属性名称和值。
欢迎任何建议。
答案 0 :(得分:0)
有一点需要注意的是,如果您只使用更简单的版本:
Map<String, Object> map = mapper.readValue(file, Map.class);
您会得到一个Map
,其中包含String
s,List
和Map
s作为值,对应于匹配的JSON结构(字符串,数组,对象)。
您通常可以使用类型java.lang.Object
来表示“使用匹配的基本Java类型”,因此您要求的签名是Map<String,Object>
,除非您要强制执行特定值,或使用POJO类型。