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

如何快速修改嵌套JSON键名?将xxxLevelSubNodes替换为children

解决JSON中嵌套的xxxLevelSubNodes键替换为children的问题

我明白你遇到的麻烦了——普通循环只能处理表层结构,还容易出现覆盖问题,嵌套的子节点根本碰不到。解决这类嵌套JSON的键名替换,递归遍历是最靠谱的方案,它能深入每一层结构,同时完整保留原有数据的层级关系。

核心思路

写一个递归函数,遍历JSON的每一个节点:

  • 如果是数组,就逐个处理数组里的每一项;
  • 如果是对象,就遍历所有键名,判断是否匹配xxxLevelSubNodes的模式(比如用正则匹配结尾是LevelSubNodes的键);
  • 匹配到的键就替换为children,同时对对应的值继续递归处理(确保嵌套的子节点也被修改);
  • 非对象/数组的原始值(比如字符串、数字)直接返回。

JavaScript实现示例

function renameSubNodesToChildren(obj) {
    // 处理数组:递归遍历每个元素
    if (Array.isArray(obj)) {
        return obj.map(item => renameSubNodesToChildren(item));
    }
    // 处理对象:遍历所有键
    if (typeof obj === 'object' && obj !== null) {
        const newObj = {};
        for (const key in obj) {
            if (obj.hasOwnProperty(key)) {
                // 匹配所有以LevelSubNodes结尾的键
                if (key.match(/LevelSubNodes$/)) {
                    newObj['children'] = renameSubNodesToChildren(obj[key]);
                } else {
                    // 非目标键保持原样,同时递归处理值
                    newObj[key] = renameSubNodesToChildren(obj[key]);
                }
            }
        }
        return newObj;
    }
    // 原始值直接返回
    return obj;
}

// 使用示例
const originalJson = {
    "id": 1,
    "firstLevelSubNodes": [
        {
            "id": 2,
            "secondLevelSubNodes": [
                {
                    "id": 3,
                    "thirdLevelSubNodes": []
                }
            ]
        }
    ]
};

const transformedJson = renameSubNodesToChildren(originalJson);
console.log(JSON.stringify(transformedJson, null, 2));

Python实现示例

如果你用Python处理,逻辑是一样的:

import re

def rename_subnodes_to_children(obj):
    # 处理数组/列表
    if isinstance(obj, list):
        return [rename_subnodes_to_children(item) for item in obj]
    # 处理字典/对象
    elif isinstance(obj, dict):
        new_dict = {}
        for key, value in obj.items():
            # 匹配结尾为LevelSubNodes的键
            if re.search(r'LevelSubNodes$', key):
                new_dict['children'] = rename_subnodes_to_children(value)
            else:
                new_dict[key] = rename_subnodes_to_children(value)
        return new_dict
    # 原始值直接返回
    else:
        return obj

# 使用示例
original_json = {
    "id": 1,
    "firstLevelSubNodes": [
        {
            "id": 2,
            "secondLevelSubNodes": [
                {
                    "id": 3,
                    "thirdLevelSubNodes": []
                }
            ]
        }
    ]
}

transformed_json = rename_subnodes_to_children(original_json)
print(transformed_json)

为什么这个方案能解决你的问题?

  1. 递归遍历:不管嵌套多少层,函数都会深入到最底层的节点,不会漏掉任何一个xxxLevelSubNodes键;
  2. 创建新对象/数组:不会直接修改原JSON结构,避免了遍历过程中因键名修改导致的覆盖或遍历异常问题;
  3. 完整保留结构:除了目标键名被替换,其他所有键值对、数组元素的顺序和内容都和原数据一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:25:34