PHP向JSON文件添加用户时总是覆盖内容的原因排查
解决JSON文件添加用户时覆盖原有内容的问题
嘿,我懂你现在的困扰——每次尝试往JSON文件里加用户,旧数据都会被覆盖,最后文件里永远只剩刚添加的那一个。咱们先看看你贴的代码,再找出问题所在:
你的原代码
$input = json_decode($_POST["phones"], true); // 这是input中的内容 // $input = '["5345", "345345", "123"], "Michael", "Podlevskykh"]'; $file = file_get_contents('jsn.json'); // 获取文件内容 $output = json_decode($file, TRUE); // 解码JSON unset($file); // 清理变量
问题出在哪?
你现在的代码只完成了读取旧数据、解码这两步,但完全没把新的用户数据($input)和原有数据($output)合并到一起!如果之后你直接把$input写入文件,那自然会把原来的内容全部覆盖掉——就像你打开记事本,直接输入新内容而不是追加,旧内容肯定就没了呀。
修正后的代码
我把完整的流程补全,每一步都标清楚注释:
// 1. 获取前端传来的新用户数据(确保是合法的数组格式) $input = json_decode($_POST["phones"], true); // 2. 读取现有JSON文件内容,如果文件为空/不存在,初始化空数组 $existingContent = file_get_contents('jsn.json'); $existingUsers = json_decode($existingContent, true) ?? []; // 3. 把新用户数据合并到原有数组里 // 情况1:如果$input是单个用户的信息(比如一个数组或字符串) array_push($existingUsers, $input); // 情况2:如果$input是多个用户的数组,就用array_merge合并 // $existingUsers = array_merge($existingUsers, $input); // 4. 把合并后的数组重新编码为JSON格式,JSON_PRETTY_PRINT让格式更易读 $updatedJson = json_encode($existingUsers, JSON_PRETTY_PRINT); // 5. 将完整的合并数据写入文件,这时候就不会覆盖旧内容了 file_put_contents('jsn.json', $updatedJson);
关键要点
- 核心是先合并旧数据和新数据,再写入文件,而不是直接写新数据
- 用
?? []处理文件不存在或为空的情况,避免解码时出现错误 - 根据
$input的格式(单个用户/多个用户)选择对应的合并方式,确保数据结构正确
内容的提问来源于stack exchange,提问作者Michael Podlevskykh
相关产品推荐
相关产品推荐

