如何移除JSON文件中指定键的所有实例?以移除rating键为例
移除JSON文件中指定键的所有出现
针对你给出的示例需求——移除所有嵌套对象里的rating键,这里提供几种实用的实现方案,覆盖不同场景:
Python 实现
如果用Python处理,我们可以写一个递归函数遍历整个JSON结构,精准删除目标键。如果是文件形式的JSON,直接读取-处理-写入即可:
import json def remove_target_key(obj, target_key): # 处理字典类型:过滤目标键,同时递归处理值 if isinstance(obj, dict): return { k: remove_target_key(v, target_key) for k, v in obj.items() if k != target_key } # 处理列表类型:递归处理每个元素 elif isinstance(obj, list): return [remove_target_key(item, target_key) for item in obj] # 其他数据类型直接返回 else: return obj # 示例操作流程 # 1. 读取原JSON文件 with open('input.json', 'r', encoding='utf-8') as f: raw_data = json.load(f) # 2. 移除所有"rating"键 processed_data = remove_target_key(raw_data, "rating") # 3. 写入处理后的JSON文件 with open('output.json', 'w', encoding='utf-8') as f: json.dump(processed_data, f, indent=2)
测试你的示例输入:
输入JSON:
{ "player": { "rating": "99", "rarity": "super_rare" }, "player2": { "rating": "87", "rarity": "rare" } }
运行后会完全得到你期望的结果,所有层级的rating键都会被移除。
JavaScript (Node.js) 实现
在Node.js环境下,同样可以通过递归遍历实现需求:
const fs = require('fs'); function removeTargetKey(obj, targetKey) { if (typeof obj === 'object' && obj !== null) { // 处理数组 if (Array.isArray(obj)) { return obj.map(item => removeTargetKey(item, targetKey)); } // 处理对象 const newObj = {}; for (const key in obj) { if (key !== targetKey) { newObj[key] = removeTargetKey(obj[key], targetKey); } } return newObj; } return obj; } // 示例操作流程 fs.readFile('input.json', 'utf8', (err, data) => { if (err) throw err; const jsonData = JSON.parse(data); const processedData = removeTargetKey(jsonData, 'rating'); // 写入处理后的文件 fs.writeFile('output.json', JSON.stringify(processedData, null, 2), (err) => { if (err) throw err; console.log('所有目标键已移除,文件更新完成!'); }); });
命令行工具(jq)实现
如果你习惯用命令行,jq工具能帮你快速完成操作,无需编写完整代码:
jq 'walk(if type == "object" then del(.rating) else . end)' input.json > output.json
这条命令会递归遍历整个JSON结构,自动删除所有对象中的rating键,直接将结果输出到新文件。
所有方案的核心思路都是递归遍历JSON的每一层级,确保无论目标键嵌套多深,都能被准确移除。
内容的提问来源于stack exchange,提问作者hampani




