gpt4 book ai didi

java - 具有对象类型的 Jackson JSON 列表

转载 作者:搜寻专家 更新时间:2023-10-30 21:42:30 25 4
gpt4 key购买 nike

我必须从对象列表中序列化 JSON。生成的 JSON 必须如下所示:

{
"status": "success",
"models": [
{
"model": {
"id": 23,
"color": "red"
}
},
{
"model": {
"id": 24,
"color": "green"
}
}
]
}

当我简单地序列化它时,我缺少类型/键“模型”:

List<Model> list = new ArrayList<Model>(); // add some new Model(...)
Response r = new Response("success", list); // Response has field "models"

相反,我只是得到这个:

{
"status": "success",
"models": [
{
"id": 23,
"color": "red"
},
{
"id": 24,
"color": "green"
}
]
}

如何为每个对象添加“模型”,而不必编写带有属性“模型”的愚蠢包装类?

我的类(class)是这样的:

public class Response {
private String status;
private List<Model> models;
// getters / setters
}

public class Model {
private Integer id;
private String color;
// getters / setters
}

最佳答案

没有内置的方法可以做到这一点。您必须编写自己的 JsonSerializer。有点像

class ModelSerializer extends JsonSerializer<List<Model>> {

@Override
public void serialize(List<Model> value, JsonGenerator jgen,
SerializerProvider provider) throws IOException {
jgen.writeStartArray();
for (Model model : value) {
jgen.writeStartObject();
jgen.writeObjectField("model", model);
jgen.writeEndObject();
}
jgen.writeEndArray();
}

}

然后注释 models 字段以便它使用它

@JsonSerialize(using = ModelSerializer.class)
private List<Model> models;

这将序列化为

{
"status": "success",
"models": [
{
"model": {
"id": 1,
"color": "red"
}
},
{
"model": {
"id": 2,
"color": "green"
}
}
]
}

如果您同时对此进行序列化和反序列化,您还需要一个自定义反序列化器。

关于java - 具有对象类型的 Jackson JSON 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22917324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com