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

标签 java json jackson

使用 Jackson,有没有办法在序列化 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"}]}

最佳答案

您可以编写自己的自定义序列化程序,如下所示:

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();
    }
}

关于java - 在列表的序列化中包含具有数组索引的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60128343/

相关文章:

java - 具有自定义文档和编辑器的 JTextPane 无法正确显示图标

java - 如何读取我的两个数组?

jquery - 未捕获的语法错误 : Unexpected token e

javascript - 在 Angular 组件中共享大的 json 数据是好是坏?

java - 使用 Jersey JAX-RS 时,有没有办法区分作为 null 发送的字段和根本不发送的字段?

java - 如何通过 Jackson 的 JsonGenerator 编写原始 JSON?

java - 将代码样式设置从 Eclipse 部分导入到 Intellij IDEA

java - 为什么类型推断在这里失败了?

java - Proguard 混淆导致 java.lang.IllegalArgumentException : class declares multiple JSON fields named "a"

java - 使用 Jackson Mapper 有选择地将 JSON 数据的一部分映射到嵌套类