PHP通过字典JSON替换主JSON字段值生成新文件的问题求助
修复方案
现有代码问题定位
- 索引起始错误:PHP数组默认从0开始遍历,你写的
for($i = 1; $i < count($decoded); $i++)直接跳过了第一条产品数据,如果测试时只有1条数据,会完全看不到替换效果 - 缺少容错处理:没有判断JSON解码是否成功、字典中是否存在对应color映射、产品数据是否有color字段,任何一个环节出错都会导致替换失败
- 没有读写校验:未验证文件读取、写入是否成功,无法定位问题环节
修正后代码
<?php // 读取文件并校验读取结果 $json = file_get_contents('main.json'); $json_dict = file_get_contents('dictionary.json'); if ($json === false || $json_dict === false) { die("JSON文件读取失败,请检查文件路径和权限"); } // 解码JSON,第二个参数传true返回关联数组,适配你给出的数组结构 $decoded = json_decode($json, true); $decoded_dict = json_decode($json_dict, true); if (json_last_error() !== JSON_ERROR_NONE) { die("JSON格式错误,解码失败"); } // 遍历所有产品数据,从0开始 for ($i = 0; $i < count($decoded); $i++) { // 先判断对应字段是否存在,避免报错 if (isset($decoded[$i]['options']['color'], $decoded_dict['options'][$decoded[$i]['options']['color']])) { $decoded[$i]['options']['color'] = $decoded_dict['options'][$decoded[$i]['options']['color']]; } } // 编码为格式化JSON,方便查看,写入文件并校验结果 $new_json = json_encode($decoded, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); if (file_put_contents("myfile.json", $new_json) === false) { die("文件写入失败,请检查目录权限"); } echo "替换完成,新文件已生成";
补充说明
如果你的JSON原本就是对象结构不需要转关联数组,只要把for循环的起始值改成0就可以解决核心问题,其他校验逻辑可以按需添加。JSON_UNESCAPED_UNICODE是避免中文转码,JSON_PRETTY_PRINT是格式化JSON方便调试,不需要可以删掉。
内容的提问来源于stack exchange,提问作者makoszet
相关产品推荐
相关产品推荐

