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

Object Mapper deserializing map array

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

我有这个 class 用于反序列化

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

出于某种原因 info 没有被反序列化...即使 List<Map<String,String>> 也没有反序列化,它始终为 null,并且 name 正在工作

(我正在使用 ObjectMapper

代码

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

谢谢

问题在于 您发布的 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. 您的 JSON 无效 - 去掉右方括号后的最后一个逗号
  2. 您的 POJO 显示没有可访问的方法来设置值(即反序列化为 Account
  3. 根据您的 post,name 字段已反序列化,我想这意味着一些可访问的 setter 实际上存在,但您可能没有 post编辑了吗?
  4. 如果 info 静默无法序列化,可能是因为您的 ObjectMapper 已配置 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIESfalse - 请参阅 docs
  5. 您可以为 info 使用 List<Map<String, String>>,或者保留 Map<String, String>[] - 这与您的问题无关。