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
相关产品推荐
相关产品推荐

