将列表反序列化为特定属性

时间:2017-09-26 06:26:15

标签: java json jackson

我有一个简单的问题,现在让我想方设法。

我想反序化:

[
   { "a": "a", "b": 1 }
   { "a": "b", "b": 2 }
]

进入这个:

@Data
public class MyObject {
    private List<BaseType> rootList;
}

我想要这样做的原因是因为我之前只是在扩展ArrayList,但现在我实际上需要一个它需要继承的真正的类,所以我不能再这样做了。我基本上只需要Jackson来填充那个内部属性,而不是我必须包装该类。

是否有注释可以执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我的问题是正确的,你想要将json数组反序列化为包含所有json数组项的数组字段的对象。您可以做的一件事是创建自定义构造函数并使用@JsonCreator对其进行注释。对于序列化,您可以在@JsonValue列表字段上方使用rootList

private static String json = "[{\"a\":\"a\",\"b\":1},{\"a\":\"b\",\"b\":2}]";
@Data
public static class MyObject {
    @JsonValue   // used during serialization
    private List<BaseType> rootList;
    @JsonCreator //used during deserialization
    public MyObject(List<BaseType> items ) {
        this.rootList = items;
    }
}

@Data
public static class BaseType {
    @JsonProperty
    private String a;
    @JsonProperty
    private int b;
}

public static void main(String[] args) throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    MyObject value = mapper.readValue(json, MyObject.class);
    System.out.println(value);
    System.out.println(mapper.writeValueAsString(value));
}