如何使用PHP向JS文件的数组中插入新对象
问题解决说明
错误原因
- db.js存储的不是纯JSON内容:文件开头有
let dataGoods =的JS变量声明前缀,结尾有分号;后缀,直接传入json_decode会解析失败返回null,后续调用array_push就会触发参数类型错误 - 待追加的
$datae本身就是PHP数组,不需要额外调用json_decode处理,直接传入array_push即可 - 原写入逻辑直接输出纯JSON,会覆盖掉原有的JS变量声明,导致db.js后续无法被前端正常引用
修正后代码
// 读取db.js文件内容 $jsContent = file_get_contents('db.js'); // 提取数组的纯JSON部分:去掉前缀'let dataGoods = '和结尾的';' $jsonStr = preg_replace('/^let\s+dataGoods\s*=\s*|\s*;$/', '', $jsContent); // 解析JSON为PHP数组,第二个参数传true返回关联数组,避免对象格式兼容问题 $tempArray = json_decode($jsonStr, true); // 直接把$datae追加到数组 array_push($tempArray, $datae); // 编码回JSON,保留中文的同时保留原文件的格式化效果 $newJson = json_encode($tempArray, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); // 拼回JS变量声明格式 $newJsContent = "let dataGoods = {$newJson};"; // 写入文件 file_put_contents('db.js', $newJsContent);
额外注意事项
可增加JSON解析错误判断,避免文件被篡改后解析失败报错:
if (json_last_error() !== JSON_ERROR_NONE) { // 解析失败时的兜底处理,比如初始化空数组 $tempArray = []; }
建议对$_POST传入的name和description参数做安全过滤,避免注入恶意内容。
内容的提问来源于stack exchange,提问作者Erzhan The_Best
相关产品推荐
相关产品推荐

