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

如何改写完整的更新后JSON文件而非仅嵌套节点?

问题原因分析

你当前的代码在遍历keyArr时,把jsonObject逐步替换成了嵌套层级最底层的IDNew对象,最后写入文件的自然只是这个内层对象,丢失了整个JSON的上层结构。

修改方案

要保留完整JSON结构,需要持有顶层JSON对象的引用,仅定位到目标key的父对象进行更新,最后写入顶层对象:

import org.json.JSONObject;
import java.io.FileReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.BufferedReader;

public class UpdateJson {
    public static void main(String[] args) {
        String filePath = "D://.../test.json";
        try {
            // 读取整个JSON文件内容到字符串
            BufferedReader reader = new BufferedReader(new FileReader(filePath));
            StringBuilder jsonContent = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                jsonContent.append(line);
            }
            reader.close();

            // 解析为顶层JSONObject
            JSONObject topJson = new JSONObject(jsonContent.toString());
            String keyToUpdate = "Added.newmem.IDNew.id";
            String[] keyArr = keyToUpdate.split("\\.");
            String targetKey = keyArr[keyArr.length - 1];

            // 定位到目标key的父对象(遍历到倒数第二个层级)
            JSONObject currentLayer = topJson;
            for (int i = 0; i < keyArr.length - 1; i++) {
                currentLayer = currentLayer.getJSONObject(keyArr[i]);
            }

            // 更新目标key的值
            currentLayer.put(targetKey, 12345);

            // 写入完整的顶层JSON到文件(toString(4)生成带缩进的格式化内容)
            FileOutputStream outputStream = new FileOutputStream(filePath);
            outputStream.write(topJson.toString(4).getBytes());
            outputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
关键修改点
  • 全程保留顶层topJson的引用,不替换它,仅用currentLayer遍历定位父层级
  • 循环只执行到keyArr.length - 1,停在目标key的父对象(即IDNew),而非最底层的id
  • 最终写入的是顶层topJson的字符串,而非内层对象
  • 用toString(4)生成带缩进的格式化JSON,方便查看结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:00:38