【Java / Spring】如何将类的实例保存为json文件

前言

需要从数据库中以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("生成文件时出错");
            }
        }
    }
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值