如何快速修改嵌套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)
为什么这个方案能解决你的问题?
- 递归遍历:不管嵌套多少层,函数都会深入到最底层的节点,不会漏掉任何一个
xxxLevelSubNodes键; - 创建新对象/数组:不会直接修改原JSON结构,避免了遍历过程中因键名修改导致的覆盖或遍历异常问题;
- 完整保留结构:除了目标键名被替换,其他所有键值对、数组元素的顺序和内容都和原数据一致。
内容的提问来源于stack exchange,提问作者CodeMan03
相关产品推荐
相关产品推荐

