当键包含另一个键时,将属性和值读入映射

时间:2014-12-16 17:00:28

标签: java json jackson

我一直在使用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,逐个获取属性,我就无法访问属性名称。

我现在一直在看这个并且找不到正确的组合来解析密钥,同时捕获属性名称和值。

欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

有一点需要注意的是,如果您只使用更简单的版本:

Map<String, Object> map = mapper.readValue(file, Map.class);

您会得到一个Map,其中包含String s,ListMap s作为值,对应于匹配的JSON结构(字符串,数组,对象)。 您通常可以使用类型java.lang.Object来表示“使用匹配的基本Java类型”,因此您要求的签名是Map<String,Object>,除非您要强制执行特定值,或使用POJO类型。