前言
需要从数据库中以json格式导出大量模板,已有的查询模板方法返回java对象。手动写入json太麻烦,需要批量将java对象保存为json文件。本篇记录实现过程。
使用 jackson.databind.ObjectMapper
实体类
假设我们需要为该User类生成json文件
@Data
@AllArgsConstructor
private class User{
private String username;
private String mobile;
}
注:该实体类使用了 Lombok 简化代码。
1. 引入依赖
Spring Boot Starter 中包含 jackson ,所以使用jackson一般不需要手动引入。
如果需要引入或者需要指定版本,可以在 pom.xml 文件中的 <dependencies> 标签内手动引入:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
2. 依赖注入
新建一个 spring boot test 类用于执行生成方法,
使用 @Autowired 或 @Resource 注入 ObjectMapper 依赖:
import com.fasterxml.jackson.databind.ObjectMapper;
@SpringBootTest
public class getTemplate {
@Autowired
private ObjectMapper objectMapper;
}
3. 指定文件保存位置和文件名
创建测试方法,指定json文件保存在项目根目录下的 userJsons 文件夹内:
@Test
void test(){
// 文件输出目录
File dir = new File("userJsons");
// 如果文件夹不存在则创建
if (!dir.exists()) dir.mkdirs();
}
4. 遍历列表生成Json文件
准备测试用用户列表:
List<User> userList = new ArrayList<>();
userList.add(new User("张三","123"));
userList.add(new User("李四","456"));
userList.add(new User("王五","789"));
将用户分别保存为json:
for (User user : userList) {
try {
// 定义文件名 用户名+.json
String fileName = user.getUsername() + ".json";
File jsonFile = new File(dir, fileName);
// 将 JSON 内容写入文件
objectMapper.writeValue(jsonFile, user);
System.out.println("生成文件: " + jsonFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
System.err.println("生成文件时出错");
}
}
5. 执行结果
备注
启用格式化输出
默认生成的json文件不换行,如果需要生成格式化的文件需要在方法中添加 ObjectMapper 配置:
// 启用格式化输出
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
完整代码
@Test
void test() {
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
// 文件输出目录
File dir = new File("userJsons");
// 如果文件夹不存在则创建
if (!dir.exists()) dir.mkdirs();
List<User> userList = new ArrayList<>();
userList.add(new User("张三", "123"));
userList.add(new User("李四", "456"));
userList.add(new User("王五", "789"));
for (User user : userList) {
try {
// 定义文件名
String fileName = user.getUsername() + ".json";
File jsonFile = new File(dir, fileName);
// 将 JSON 内容写入文件
objectMapper.writeValue(jsonFile, user);
System.out.println("生成文件: " + jsonFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
System.err.println("生成文件时出错");
}
}
}