【问题标题】:Reading attribute and values into map when key contains another key当键包含另一个键时将属性和值读入映射
【发布时间】:2014-12-16 17:00:27
【问题描述】:

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

我已经研究了一段时间,但找不到正确的组合来解析键,同时捕获属性名称和值。

欢迎提出任何建议。

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 2018-03-31
      • 1970-01-01
      • 2019-10-07
      • 2021-04-02
      • 1970-01-01
      相关资源
      最近更新 更多