gpt4 book ai didi

java - 如何使用 Jackson 将 JSON 数组序列化为编号/索引 JSON?

转载 作者:行者123 更新时间:2023-12-01 22:11:41 25 4
gpt4 key购买 nike

我有一个以下类的对象数组

public class Person
{
private Long id;
private String name;
//Rest of the getters and setters

}

public class Data
{
private ArrayList<Person> persons;

public Data()
{
persons = new ArrayList<Person>();
Person p1 = new Person(1L, "walter");
Person p2 = new Person(2L, "white");
persons.add(p1);
persons.add(p2);
}
}

现在,如果我在程序中创建对象 Data 并使用 jackson 序列化此 Data 对象,它将给出以下 JSON。

{
"data": {
"persons": [
{
"id": 1,
"name": "walter"
},
{
"id": 2,
"name": "white"
}
]
}
}

有什么方法可以将此对象序列化为以下编号/索引 JSON 吗?

{
"data": {
"persons": {
"1": {
"id": 1,
"name": "walter"
},
"2": {
"id": 2,
"name": "white"
}
}
}
}

最佳答案

我认为这不是你可以直接告诉 jackson 做的事情。

我能想到的最简单的解决方案是将你得到的数组变成 HashMap<Integer, Person>并将其传递给 jackson 。

如果顺序很重要(您希望“1”位于“2”之前),那么您可以使用 LinkedHashMap<Integer, Person>

类似这样的事情:

HashMap<Integer, Person> pMap = new HashMap<>();
for(int i = 0; i < persons.size(); i++){
pMap.put(i, persons.get(i));
}

编辑:事实证明你可以做到,你只需要自己编写序列化器 1 ,所以你会做类似的事情:

public class PersonSerializer extends JsonSerializer<Person> {
@Override
public void serialize(Person person, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject(String.valueOf(i));
jgen.writeNumberField("id", i);
jgen.writeStringField("name", person.getName());
jgen.writeEndObject();
}
}

您只需向 Person 类添加注释即可告诉 Jackson 使用此序列化程序

@JsonSerialize(using = PersonSerializer.class)
public class Person
{
private Long id;
private String name;
//Rest of the getters and setters

}

关于java - 如何使用 Jackson 将 JSON 数组序列化为编号/索引 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31706540/

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