You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过REST API导入并使用Spring Boot解析JSON文件?

嘿,作为Spring Boot新手,我完全懂你想把之前处理CSV的逻辑迁移到JSON文件上的需求!咱们一步步来,把这个事儿搞定~

1. 接收上传的JSON文件(和CSV逻辑一致)

其实上传JSON文件的接收方式和你之前处理CSV几乎一样,因为本质都是接收客户端上传的文件流。你可以直接复用类似的控制器方法,只是后续的解析逻辑不同:

@RequestMapping(value = "/import-json", method = RequestMethod.POST)
public String handleJsonFileUpload(@RequestParam("file") MultipartFile multipartFile) throws IOException {
    String fileName = multipartFile.getOriginalFilename();
    System.out.println("Uploaded JSON file name: " + fileName);
    
    // 接下来咱们在这里加JSON解析逻辑
    return "JSON file uploaded and processed successfully!";
}
2. 解析JSON内容(用Spring默认的Jackson库)

Spring Boot默认集成了Jackson作为JSON处理库,不用额外引入依赖。这里分两种常见场景来处理:

2.1 解析到自定义实体类(推荐结构化处理)

如果你的JSON有固定结构,比如是一组用户数据,先定义一个对应实体类(Jackson需要无参构造函数,记得加上):

public class User {
    private String id;
    private String name;
    private int age;
    
    // 必须的无参构造函数
    public User() {}
    
    // Getter和Setter方法
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

然后在控制器里用ObjectMapper解析文件流到实体类集合:

@RequestMapping(value = "/import-json", method = RequestMethod.POST)
public String handleJsonFileUpload(@RequestParam("file") MultipartFile multipartFile) throws IOException {
    String fileName = multipartFile.getOriginalFilename();
    System.out.println("Uploaded JSON file name: " + fileName);
    
    // 初始化Jackson的ObjectMapper
    ObjectMapper objectMapper = new ObjectMapper();
    
    // 解析JSON数组到List<User>,用TypeReference解决泛型类型擦除问题
    List<User> userList = objectMapper.readValue(
        multipartFile.getInputStream(),
        new TypeReference<List<User>>() {}
    );
    
    // 这里可以做你需要的业务处理,比如打印数据、存入数据库等
    userList.forEach(user -> System.out.println("用户:" + user.getName() + ",年龄:" + user.getAge()));
    
    return "JSON file uploaded and processed successfully!";
}

2.2 解析到通用集合(适合不确定JSON结构的场景)

如果你的JSON结构不固定,或者只是想快速查看内容,可以解析成Map或List这种通用集合:

@RequestMapping(value = "/import-json", method = RequestMethod.POST)
public String handleJsonFileUpload(@RequestParam("file") MultipartFile multipartFile) throws IOException {
    String fileName = multipartFile.getOriginalFilename();
    System.out.println("Uploaded JSON file name: " + fileName);
    
    ObjectMapper objectMapper = new ObjectMapper();
    
    // 解析成通用的List<Map<String, Object>>(针对JSON数组的情况)
    List<Map<String, Object>> jsonData = objectMapper.readValue(
        multipartFile.getInputStream(),
        new TypeReference<List<Map<String, Object>>>() {}
    );
    
    // 遍历打印所有JSON内容
    jsonData.forEach(item -> System.out.println("JSON条目:" + item));
    
    return "JSON file uploaded and processed successfully!";
}
3. 额外的实用小技巧
  • 文件格式校验:可以在方法开头先判断上传的是不是JSON文件,避免无效请求:
if (!multipartFile.getOriginalFilename().toLowerCase().endsWith(".json")) {
    return "请上传有效的JSON文件!";
}
  • 大文件流式解析:如果JSON文件很大,不要一次性读进内存,用流式解析避免内存溢出:
try (InputStream inputStream = multipartFile.getInputStream()) {
    MappingIterator<User> iterator = objectMapper.readerFor(User.class).readValues(inputStream);
    while (iterator.hasNext()) {
        User user = iterator.next();
        // 逐个处理用户数据
    }
}

内容的提问来源于stack exchange,提问作者user6618310

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:42:55