在列表的序列化中包含带有数组索引的字段

问题描述 投票:1回答:1

使用杰克逊,有没有办法在序列化的json中添加带有列表中元素索引的字段?

public class A {
  private static List<B> bs = new LinkedArrayList<>();
}

public class B {
  private String b;
} 

预期结果:

{"bs": [{"index":1, "b":"b1"}, {"index":2, "b":"b2"}]}
java json jackson
1个回答
0
投票

您可以这样编写自己的自定义序列化程序:

public static class A {
    @JsonSerialize(using = BListSerializer.class)
    private List<B> bs;

    public A(List<B> bs) {
        this.bs = bs;
    }
}

public static class B {
    private String b;

    public B(String b) {
        this.b = b;
    }
}

public static class BListSerializer extends JsonSerializer<List<B>> {

    @Override
    public void serialize(List<B> listOfB, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartArray();
        for (int i = 0; i < listOfB.size(); i++) {
            jsonGenerator.writeStartObject();
            jsonGenerator.writeNumberField("index", i+1);
            jsonGenerator.writeStringField("b", listOfB.get(i).b);
            jsonGenerator.writeEndObject();
        }
        jsonGenerator.writeEndArray();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.