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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:56:29