如何将给定的字符串解析为对象字符串映射的字符串映射?

时间:2018-05-09 05:57:26

标签: java jackson

您的输入字符串如下所示

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

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

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

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

有人建议我采用这种方法或解决方案,两者都同样有用。

1 个答案:

答案 0 :(得分:0)

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

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

对于此类输入,您可以使用jackson:

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,或者为jackson处理这个编写你自己的Deserializer,因为目前它不可能用不带引号的字符串值读取json。 / p>