如何用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
相关产品推荐
相关产品推荐

