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

如何用Java向已有JSON文件追加数据?现有json-simple代码失效求方案

问题分析与解决方案

首先,你的代码存在两个核心问题:

  • 你错误地把新学生的信息直接作为键值对添加到了原有的单个JSONObject里,而不是创建独立的学生对象并组成集合。
  • 代码只做了控制台输出,没有将更新后的内容写回文件,也没有处理完整的IO异常。

另外,你期望的输出其实更适合用JSON数组来表示(用[]包裹,这才是合法的JSON格式),而不是单纯用逗号分隔对象,这样后续读取和操作也更规范。

修正后的代码示例

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class JsonWritingProject {
    public static void main(String[] args) {
        JSONParser jsonParser = new JSONParser();
        JSONArray studentArray = new JSONArray();

        try {
            // 读取原文件中的单个学生对象
            Object obj = jsonParser.parse(new FileReader("student.json"));
            JSONObject existingStudent = (JSONObject) obj;
            // 将原对象加入数组
            studentArray.add(existingStudent);

            // 创建第一个新学生对象
            JSONObject brock = new JSONObject();
            brock.put("name", "BROCK");
            brock.put("age", 3);
            studentArray.add(brock);

            // 创建第二个新学生对象
            JSONObject joe = new JSONObject();
            joe.put("name", "Joe");
            joe.put("age", 4);
            studentArray.add(joe);

            // 将数组写入文件
            try (FileWriter writer = new FileWriter("student.json")) {
                writer.write(studentArray.toJSONString());
                writer.flush();
                System.out.println("文件更新完成!");
                System.out.println(studentArray.toJSONString());
            }

        } catch (IOException | ParseException e) {
            e.printStackTrace();
        }
    }
}

关键改动说明

  • 使用JSONArray存储多个学生对象,符合标准JSON结构,后续维护和解析更方便。
  • 为每个新学生创建独立的JSONObject,而非在原对象上追加键值对。
  • 使用FileWriter将更新后的数组写回文件,并用try-with-resources语法自动关闭流,避免资源泄漏。
  • 完善了异常处理,覆盖了所有可能的IO和解析异常。

执行后,你的student.json内容会变成标准的JSON数组:

[{"name":"Mahesh","age":10},{"name":"BROCK","age":3},{"name":"Joe","age":4}]

如果坚持要输出你展示的逗号分隔格式(虽然不推荐,因为不是合法JSON),可以遍历数组手动拼接字符串,但强烈建议使用标准JSON数组格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:40