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

PHP插入无主键JSON对象遇问题:网站语言管理脚本异常

解决JSON语言数据追加不符合预期的问题

嘿,我一眼就看出问题出在哪了——你把JSON的结构类型搞混啦!你的目标JSON是**对象(关联数组)**结构,但你却用了针对数组的array_push()方法,这就导致新的语言数据被错误地当成数组元素追加,而不是变成对象的新键值对。

先理清楚问题根源

你的初始JSON结构是这样的:

{ "English": { "shortcode": "EN" } }

这是一个顶层为对象的结构,每个语言都是对象的一个键,对应的值是该语言的信息子对象。但你当前的代码里,array_push($json, $data)会把$data作为一个新元素塞进数组里,最终生成的JSON会变成数组套对象的结构,完全不是你想要的样子。

修正后的代码实现

你需要做的是直接给解析后的关联数组添加新键值对,而不是用array_push。完整代码如下:

// 先读取并解析JSON文件,转为关联数组
$jsonFile = __DIR__.'/../files/lg.json';
$jsonContent = file_get_contents($jsonFile);
$langData = json_decode($jsonContent, true);

// 添加新语言(建议键名和现有格式统一,首字母大写)
$langKey = ucfirst('french'); // 变成French,和English格式一致
$langData[$langKey] = $_POST;

// 重新编码并写入文件
$updatedJson = json_encode($langData, JSON_PRETTY_PRINT);
file_put_contents($jsonFile, $updatedJson);

几个额外的小建议

  • 统一键名格式:现有键是English,新键最好也用French这种首字母大写的格式,避免结构混乱
  • 校验POST数据:别直接把所有POST数据都写进去,最好过滤出需要的字段(比如shortcode),防止写入无效或恶意内容
  • 加错误处理:可以给file_get_contents和file_put_contents加判断,比如检查文件是否存在、是否有读写权限,避免出现意外报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:29:54