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

咨询:如何用PHP通过GET传参删除JSON中指定键的内容

问题描述

现有JSON数据:

[
    {
        "1":{
        "a":"blablabla",
        "b":"...",
        "c":"..",
        "e":"..."
        },

        "2":{
        "a":"blablabla",
        "b":"...",
        "c":"..",
        "e":"..."
        },

        "3":{
        "a":"blablabla",
        "b":"...",
        "c":"..",
        "e":"..."
        }
    }
]

需要删除指定键(比如示例中的"2")对应的对象,最终得到:

[
    {
        "1":{
        "a":"blablabla",
        "b":"...",
        "c":"..",
        "e":"..."
        },

        "3":{
        "a":"blablabla",
        "b":"...",
        "c":"..",
        "e":"..."
        }
    }
]

想用PHP实现,通过GET请求获取要删除的键值,但之前写的代码会把全部内容删掉,求可行方案。

解决方案

你之前的代码踩了结构的坑——原JSON是外层数组套了一个对象,你直接遍历外层数组,根本没碰到底层存着目标键的那个内部对象。直接看可行代码:

// 从GET请求拿要删除的键,参数名设为delete_key
$deleteKey = $_GET['delete_key'] ?? '';

if (!empty($deleteKey)) {
    // 读JSON文件
    $data = file_get_contents('teste_data.json');
    // 转成关联数组
    $jsonArr = json_decode($data, true);
    
    // 取数组里的第一个元素,也就是存着键1、2、3的那个对象
    $innerObj = &$jsonArr[0];
    
    // 检查要删的键存在就删掉
    if (isset($innerObj[$deleteKey])) {
        unset($innerObj[$deleteKey]);
    }
    
    // 转成格式化后的JSON,保证和原格式一致
    $newJson = json_encode($jsonArr, JSON_PRETTY_PRINT);
    // 写回文件
    file_put_contents('teste_data.json', $newJson);
}
关键说明
  • 用$_GET['delete_key'] ?? ''处理参数,没传参也不会报错
  • 用引用&$jsonArr[0]直接操作内部对象,省得额外拷贝数组
  • 加isset判断,避免删不存在的键出问题
  • JSON_PRETTY_PRINT让输出的JSON和原文件一样排版好看

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:05:24