【问题标题】:Convert POJO into JSON [duplicate]将 POJO 转换为 JSON [重复]
【发布时间】:2023-02-02 12:24:09
【问题描述】:
我有一个 POJO。
@Data
@AllArgsConstructor
@Builder
public class Emp {
private String position;
private String name;
}
假设,我们创建了一个对象
Emp emp = new Emp("Manager", "Bob");
如何将其转换为列表并以 JSON 格式保存在数据库中?
数据应按以下格式存储在数据库中:
{
list:[
{
position: Manager
name: Bob
}
]
}
有现成的解决方案吗?
我将一个对象转换为一个列表,然后在其上调用了 .toString() 方法:
Collections.singletonList(emp);
但是当我将它存储到数据库中时,下一次保存到数据库中:
[Emp(position=Manager, name=Bob)]
但我需要以不同的方式存储记录
【问题讨论】:
标签:
java
json
spring
spring-boot
jackson
【解决方案1】:
如何将其转换为列表并将其保存在 JSON 的数据库中
格式?
数据应按以下格式存储在数据库中:
{
"list": [
{
"position": "Manager"
"name": "Bob"
}
]
}
由于序列化的 JSON 需要具有属性 "list",因此您不能简单地按原样序列化 List。
相反,您可以定义一个包装此列表的 POJO。
这就是它的样子(为了使其适合序列化任何类型的列表,我将其设为通用):
@Data
@AllArgsConstructor
public static class ListWrapper<T> {
private List<T> list;
}
这就是使用 Jackson 的 ObjectMapper 和 ObjectWriter 序列化它的方式:
List<Emp> emps = List.of(new Emp("Manager", "Bob"));
ListWrapper<Emp> listWrapper = new ListWrapper<>(emps);
ObjectMapper mapper = new ObjectMapper();
ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
String json = writer.writeValueAsString(listWrapper);
System.out.println(json);
输出:
{
"list" : [ {
"name" : "Manager",
"position" : "Bob"
} ]
}
【解决方案2】:
如果您需要将对象列表作为 JSON 存储在数据库中,那么您需要使用 Jackson ObjectMapper 将对象列表转换为 JSON 字符串。将转换后的字符串存储到数据库中。