Java中如何向现有JSON节点写入数据且不丢失原有数据
核心实现逻辑
必须先读取原有JSON文件的全量内容到内存,更新course数组节点后再全量写回文件,即可保证原有存储内容不丢失。以下以Java生态常用的Jackson JSON处理库为例给出实现方案:
1. 引入依赖(Maven)
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
如果用Gradle或者其他构建工具,对应引入同版本的Jackson依赖即可。
2. 完整实现代码
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import java.io.File; import java.io.IOException; public class AppendCourseData { public static void main(String[] args) throws IOException { // 初始化Jackson解析工具 ObjectMapper objectMapper = new ObjectMapper(); // 替换为你的JSON文件实际存储路径 File jsonFile = new File("your/data/path/data.json"); // 读取现有JSON文件解析为根节点 JsonNode rootNode = objectMapper.readTree(jsonFile); // 获取course对应的数组节点 ArrayNode courseArray = (ArrayNode) rootNode.get("course"); // -------------------- 追加新数据开始 -------------------- // 追加course1数据 courseArray.add("course1"); ObjectNode course1Info = objectMapper.createObjectNode(); course1Info.put("StartDate", "16/09/2022"); course1Info.put("EndDate", "16/09/2022"); courseArray.add(course1Info); // 追加course2数据 courseArray.add("course2"); ObjectNode course2Info = objectMapper.createObjectNode(); course2Info.put("StartDate", "1/10/2021"); course2Info.put("EndDate", "1/10/2022"); courseArray.add(course2Info); // -------------------- 追加新数据结束 -------------------- // 格式化后写回原文件 objectMapper.writerWithDefaultPrettyPrinter().writeValue(jsonFile, rootNode); } }
注意事项
- 你提供的示例JSON存在末尾冗余逗号的语法问题,实际使用前请确保原JSON文件语法合法,否则会解析失败
- 如果是首次创建JSON文件不存在原有内容,需要先初始化写入带有空
course数组的JSON结构,再执行追加逻辑 - 若使用Fastjson2等其他JSON处理库,实现逻辑一致:先读取文件为JSON对象,获取
course数组节点后调用add方法追加元素,最后写回文件即可
内容的提问来源于stack exchange,提问作者Hannan Max
相关产品推荐
相关产品推荐

