首页 > 解决方案 > 如何将给定的字符串解析为对象字符串映射的字符串映射?

问题描述

嗨,我的输入字符串看起来像这样

{
   6138249={
              value=[multi2, multi3, multi4], 
              key=TestMulticat
           }, 
   6161782={
              value=Traps (Bamboo / Box), 
              key=Observation gear
           }
}

我想Map<String,Map<String,Object>>在java中映射这个输入字符串。

由于输入对我来说看起来更神秘,我无法弄清楚如何做同样的事情。我尝试过 ObjectMapper上课,jackson但仍然无法映射。我写的代码是这样的

Map<String,Map<String,Object>> data=objectMapper.readValue(singledoc, Map.class);

有人可以建议我执行此操作的方法或解决方案吗,两者都同样有帮助。

标签: javajackson

解决方案


您的输入看起来不像有效的 json,因为它具有未引用的字符串值。Json 看起来像这样:

{
6138249:{
          value:["multi2", "multi3", "multi4"], 
          key:"TestMulticat"
       }, 
6161782:{
          value="Traps (Bamboo / Box)", 
          key="Observation gear"
       }
}

对于这样的输入,您可以使用杰克逊:

objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
Map<String, Map<String, Object>> result = objectMapper
       .readValue(test, new TypeReference<Map<String, Map<String, Object>>>() {});

ALLOW_UNQUOTED_FIELD_NAMES将帮助您处理未引用的字段名称,但是对于未引用的值没有这样的选项。

在您的情况下,它不是 json,您可以修复序列化以生成有效的 jackson,或者编写自己的序列化来Deserializer处理 jackson,因为目前无法读取带有未引用字符串值的 json。


推荐阅读