对象映射器反序列化映射数组

时间:2019-08-01 13:52:50

标签: java objectmapper

   {
       "name" : "test",
       "info": [
          {
            "key1": "test",
            "key2": "blaa",
            "key3": "yadayada"
          },
          {
            "key4": "test1",
            "key5": "blaa1",
            "key6": "yadayada1"
          }
        ],
    }

我有此类反序列化课程

public class Account{
    private String name;
    private Map<String,String>[] info;
}

由于某种原因info尚未反序列化...甚至没有将List<Map<String,String>>始终设为空,并且name仍在工作

(即使用ObjectMapper

代码

   ObjectMapper objectMapper = new ObjectMapper();
   objectMapper.disable( DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
   results = objectMapper.readValue(responseBody.getEntity().getContent(), Account.class);

谢谢

2 个答案:

答案 0 :(得分:1)

问题出在以下事实上:您发布的JSON模式最后以逗号开头)。尝试以下

假设responseBody.getEntity().getContent()是您发布的JSON

Account.java

或更具体

private String name;
private Map<String,String>[] info;
//getters && setters && default constructor

反序列化方法

    Account account = null;
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        account = objectMapper.readValue(responseBody.getEntity().getContent(), Account.class);
    } catch (IOException e) {
        e.printStackTrace();
    }

答案 1 :(得分:0)

这是错杂的混合体。

  1. 您的JSON无效-在右方括号后抛最后一个逗号
  2. 您的POJO显示没有可访问的方法来设置值(即反序列化为Account
  3. 根据您的帖子,name字段已反序列化,我认为这实际上意味着存在一些可访问的设置器,但您可能没有发布它?
  4. 如果info静默无法序列化,则可能是因为您的ObjectMapper已被DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES配置为false-请参见WorksheetFunction.EoMonth method
  5. 您可以为List<Map<String, String>>使用info,也可以保留Map<String, String>[]-与您的问题无关。