咨询:如何用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
相关产品推荐
相关产品推荐

