杰克逊反序列化包含对象数组的对象

时间:2018-07-10 11:46:43

标签: json spring-boot jackson mapping

我正在尝试将JSON响应反序列化为这样的对象:

@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Group {
    private String id;
    private String name;
    private String description;
    private List<EffectiveRoles> roles;
}

其中 EffectiveRoles 基本上是:

@Data
public class EffectiveRole {
    private String id;
    private String name;
    private String self;
}

我在GET请求中获得的JSON响应如下所示:

{
  "roles": {
    "references": [
      {
        "role": {
          "id": "",
          "name": "",
          "self": ""
        },
        "self": ""
      }
    ]
  }
}

如何反序列化此响应以创建包含所提及值的 roles 数组? 我在使用Jackson实施正确的ObjectMapping时遇到麻烦。 最简单的方法是使对象结构看起来像传入的JSON,但我想使其更易于访问以用于进一步的前端使用。

1 个答案:

答案 0 :(得分:0)

假设flexjson存在于类路径中,那么导入将是:

import flexjson.JSONDeserializer;
import flexjson.transformer.DateTransformer; 

和要转换的代码为:

new JSONDeserializer<List<Group>>().use(null, ArrayList.class).use("values", Group.class).deserialize(json);

/// json是包含json响应的字符串

在pom.xml中添加以下依赖项以获得flexjson。

<dependency>
   <groupId>net.sf.flexjson</groupId>
   <artifactId>flexjson</artifactId>
   <version>2.1</version>
</dependency>