如何将POJO转换为指定结构的JSON并存储至数据库?
问题描述
现有如下Emp类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" } ] }
尝试通过Collections.singletonList(emp)将对象转为列表后调用toString()存储,但数据库中存储的内容为[Emp(position=Manager, name=Bob)],不符合需求,求现成解决方案。
解决方案
直接调用对象的toString()得到的是Java对象的默认字符串表示,并非标准JSON格式,必须使用专业的JSON序列化工具来处理,以下是两种常用方案:
方案1:使用Jackson库
Jackson是Java生态中广泛使用的JSON处理工具,步骤如下:
- 引入Maven依赖(Gradle可对应调整):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 建议使用最新稳定版本 --> </dependency>
- 序列化实现,两种方式可选:
方式一:创建包装类匹配JSON结构
先定义一个包装类来对应目标JSON的外层结构:
@Data public class EmpWrapper { private List<Emp> list; }
然后执行序列化:
// 初始化包装类并填充数据 EmpWrapper wrapper = new EmpWrapper(); wrapper.setList(Collections.singletonList(emp)); // 初始化Jackson核心类 ObjectMapper objectMapper = new ObjectMapper(); // 序列化为标准JSON字符串 String jsonStr = objectMapper.writeValueAsString(wrapper);
方式二:用Map临时构建结构(无需额外类)
如果不想新增包装类,可直接用Map构建目标结构:
Map<String, Object> dataMap = new HashMap<>(); dataMap.put("list", Collections.singletonList(emp)); ObjectMapper objectMapper = new ObjectMapper(); String jsonStr = objectMapper.writeValueAsString(dataMap);
方案2:使用FastJSON库
FastJSON是国内常用的高性能JSON处理库,步骤如下:
- 引入Maven依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.25</version> <!-- 建议使用最新稳定版本 --> </dependency>
- 序列化实现,两种方式可选:
方式一:使用包装类
EmpWrapper wrapper = new EmpWrapper(); wrapper.setList(Collections.singletonList(emp)); // 直接序列化为JSON字符串 String jsonStr = JSON.toJSONString(wrapper);
方式二:用Map构建结构
Map<String, Object> dataMap = new HashMap<>(); dataMap.put("list", Collections.singletonList(emp)); String jsonStr = JSON.toJSONString(dataMap);
最后将生成的jsonStr存入数据库,即可得到符合要求的JSON格式。
内容的提问来源于stack exchange,提问作者Sam Johnson
相关产品推荐
相关产品推荐

