You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何移除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

火山引擎 最新活动