首页 > 解决方案 > 杰克逊反序列化对象以列出

问题描述

这是示例 json。

{
    "foo1" : "...",
    "foo2" : "...",
    "foo3" : "...",
    "foo4" : "..."
}

我想像这样反序列化它。

class Response {
    List<Foo> foos;
}

我试过这个,但没有奏效。

class Response {
    ...
    
    @JsonProperty("foo\\d")
    private void collect(String bar) {
        foos.add(bar);
    }
}

这行得通。但我想要更简单的事情。

@JsonProperty("foo1")
private void collect1(String bar) {
    foos.add(bar);
}

@JsonProperty("foo2")
private void collect2(String bar) {
    foos.add(bar);
}
    .
    .
    .

标签: javajackson

解决方案


您应该尝试@JsonAnySetter注释。

例子:

public class Test {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        String json = "{\n" +
            "  \"foo1\" : \"...\",\n" +
            "  \"foo2\" : \"...\",\n" +
            "  \"foo3\" : \"...\",\n" +
            "  \"foo4\" : \"...\"\n" +
            "}";
        Test test = objectMapper.readValue(json, Test.class);
    }

    @JsonAnySetter
    void setInformation(String key, Object value) {
        System.out.println(key + " " + value);
    }
}

main()方法调用的输出是:

foo1 ...
foo2 ...
foo3 ...
foo4 ...

推荐阅读