【问题标题】:Map Java field to JSON document root将 Java 字段映射到 JSON 文档根
【发布时间】:2016-09-25 16:16:02
【问题描述】:

我找不到如何映射以下 json 的示例:

{
"id":1,
"name":"hugodesmarques",
"age":30,
}

使用jackson到以下java对象:

public class EntityDto {
   private Map<String, Object> content;
}

注意 dto 只是一个包装器。我想要实现的是拥有一个带有 Map{name=>"hugodesmarques", age=>30, id=>1} 的对象 EntityDto。

我想避免将每个 json 字段映射到对象映射。

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    退后一步

    首先,您在问题中发布的 JSON 是无效30 后面有一个逗号,它不应该在那里。修复你的 JSON,否则 Jackson 不会解析它:

    {
      "id": 1,
      "name": "hugodesmarques",
      "age": 30
    }
    

    使用 Jackson 解析 JSON

    EntityDto类中添加一个带有@JsonCreator注解的构造函数,如下:

    public class EntityDto {
    
        private Map<String, Object> content;
    
        @JsonCreator
        public EntityDto(Map<String, Object> content) {
            this.content = content;
        }
    
        // Getters and setters omitted
    }
    

    然后使用ObjectMapper解析JSON:

    String json = "{\"id\":1,\"name\":\"hugodesmarques\",\"age\":30}";
    
    ObjectMapper mapper = new ObjectMapper();
    EntityDto entityDto = mapper.readValue(json, EntityDto.class);
    

    【讨论】:

    • 谢谢,我的错误是我专门为这个问题编写了示例 json。我会尝试您的建议,如果可行,我会通知您。
    【解决方案2】:

    类的结构必须像 JSON 的结构:

    public class EntityDto {
       int id;
       String name;
       int age;
    }
    

    【讨论】:

      【解决方案3】:

      Jackson 可以将 JSON 读取为 HashMap:

          ObjectMapper mapper = new ObjectMapper();
          Map<String, Object> map = mapper.readValue("{\"id\":1, \"name\": \"One\"}", HashMap.class);
          EntityDto dto = new EntityDto();
          dto.setContent(map);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 1970-01-01
        • 2016-06-24
        • 2023-03-10
        • 1970-01-01
        • 2015-09-05
        相关资源
        最近更新 更多