如何合并两个JSON文件?新手求助指定文件路径问题
解决JSON文件合并及路径指定问题
原代码的问题
- 直接用
json_decode($filename, true)是错误的,json_decode需要传入文件内容而非文件名,得先通过file_get_contents($filename)读取文件内容 $data[]的写法会导致每次循环都往数组里追加元素,合并时会出现不必要的嵌套glob("*.json")会遍历当前目录所有JSON文件,若你只需要合并指定的两个,得明确指定文件路径
修正后的代码
情况1:合并指定的两个JSON文件
function mergeJson() { // 手动指定要合并的文件路径,支持相对/绝对路径 $filePaths = [ 'file1.json', // 当前脚本同目录的文件 '../docs/file2.json' // 示例:上级目录docs文件夹下的file2.json ]; $mergedData = []; foreach ($filePaths as $path) { // 读取文件内容 $content = file_get_contents($path); // 解析JSON为关联数组 $jsonData = json_decode($content, true); // 仅当解析结果为有效数组时才合并 if (is_array($jsonData)) { $mergedData = array_merge($mergedData, $jsonData); } } // 生成合并后的JSON文件 file_put_contents('merged.json', json_encode($mergedData, JSON_PRETTY_PRINT)); } // 调用函数执行合并 mergeJson();
情况2:合并指定目录下的所有JSON文件
function mergeJson() { // 指定目标目录,比如当前脚本所在目录下的json_files文件夹 $targetDir = 'json_files/'; // 匹配该目录下所有JSON文件 $filePaths = glob($targetDir . '*.json'); $mergedData = []; foreach ($filePaths as $path) { $content = file_get_contents($path); $jsonData = json_decode($content, true); if (is_array($jsonData)) { $mergedData = array_merge($mergedData, $jsonData); } } file_put_contents('merged.json', json_encode($mergedData, JSON_PRETTY_PRINT)); } mergeJson();
路径说明
- 相对路径:以当前PHP脚本所在位置为基准,比如
'file.json'是脚本同目录文件,'../file.json'是上级目录文件,'subdir/file.json'是脚本所在目录下subdir子文件夹里的文件 - 绝对路径:直接写完整路径,比如Windows的
'C:/projects/json/file.json',Linux的'/var/www/json/file.json',这种方式路径指向明确,不容易出错
注意事项
- 确保PHP脚本有读取源JSON文件和写入合并后文件的权限
- 若JSON文件格式错误,
json_decode会返回null,代码里的is_array($jsonData)判断可以避免合并无效数据导致的报错
内容的提问来源于stack exchange,提问作者Rodjammer
相关产品推荐
相关产品推荐

