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

如何根据路径格式数据高效更新嵌套JSON且不覆盖已有字段

嵌套JSON指定路径更新方案

核心逻辑

JSONObject为引用传递类型,只需遍历到目标字段的上一级父对象,直接调用put方法更新目标字段即可,无需重构上层结构,不会丢失同层级其他字段。

实现步骤

  • 拆分接收的消息,按=分割为路径部分和目标值部分,限制拆分2次避免值中包含=导致解析错误
  • 将路径部分按/分割为层级数组,数组最后一个元素为待更新的目标字段名,其余元素为父级嵌套路径
  • 遍历父级嵌套路径,逐层获取对应层级的JSONObject,不存在的层级可按你的现有逻辑创建
  • 最终获取到目标字段的父对象后,直接调用put方法写入目标字段和新值即可完成更新

完整代码示例

import org.json.JSONObject;

public class NestedJsonUpdater {
    public static void main(String[] args) {
        // 原始JSON示例,包含同层级其他字段pqr
        String originJson = "{\"root\":{\"abc\":{\"xyz\":\"oldVal\",\"pqr\":\"keepMe\"}}}";
        // 接收的消息示例
        String receiveMsg = "abc/xyz=yo";

        // 拆分消息为路径和目标值
        String[] msgSplit = receiveMsg.split("=", 2);
        String pathStr = msgSplit[0];
        String targetVal = msgSplit[1];

        // 拆分路径为层级数组
        String[] pathLevels = pathStr.split("/");
        int totalLevel = pathLevels.length;

        JSONObject mainObj = new JSONObject(originJson);
        // 从root节点开始遍历
        JSONObject currentParent = mainObj.getJSONObject("root");

        // 遍历到目标字段的上一级父节点
        for (int i = 0; i < totalLevel - 1; i++) {
            String currentLevelKey = pathLevels[i];
            // 可在此处添加层级不存在时的创建逻辑,你已具备该能力故省略
            currentParent = currentParent.getJSONObject(currentLevelKey);
        }

        // 直接更新目标字段,不影响其他字段
        String targetKey = pathLevels[totalLevel - 1];
        currentParent.put(targetKey, targetVal);

        // 输出验证结果
        System.out.println(mainObj.toString(2));
    }
}

运行结果验证

执行后输出的JSON如下,可见pqr字段保留,xyz已成功更新为新值:

{
  "root": {
    "abc": {
      "xyz": "yo",
      "pqr": "keepMe"
    }
  }
}

兼容说明

该逻辑天然兼容单层路径场景,例如输入消息为rootKey=test时,循环不会执行,直接在root节点更新对应字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:27:04