我拆分了一个大 Json 文件以更正确地编辑信息。现在我编辑了它,如何将它们合并回 php?

I split a large Json file to more correctly edit the information. Now that I edit it, how can I merge them back in php?

我有一个母版 Json,我将其拆分成多个单独的文件,以便 accurately/correctly 编辑更多信息。我进行了编辑,现在想将它们组合回 php 中的一个母版 json。我目前设置的方法是将 json 全局化,然后执行 foreach 并连接,但我似乎在连接时遇到了问题。我尝试了 array_merge_recursive,一开始只有一个小的 json,值设置为 null,第二次我得到了一组键,每个键的值都是整个 json一遍又一遍地重复。感谢您的帮助!

编辑: 我有一个大师 json 看起来像这样 -

"HELLO": {
    "title": "Hello",
    "elang": "English",
    "abbr": "HLLO",
},
"WORLD": {
    "title": "World",
    "elang": "English",
    "abbr": "WLRD",
},

我通过这样做将每个 json 相应地放入了自己的文件中 -

$part2 = json_decode(file_get_contents('../json/Master2.json'), true);
    foreach ($part2 as $keyp3 => $valuep3) {
        file_put_contents("../json/individual/$keyp3.json", json_encode($valuep3, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
    }

将它们分开后,我 运行 一个 glob 并编辑了特定的行以获得我想要的信息。下面是我被建议使用的代码,但它没有正确输出数据,也没有输出我拥有的所有数据:

$final = [];
foreach ($indJson as $keyp5 => $valuep5) {
    $indV = json_decode(file_get_contents("$valuep5"), true);
    foreach ($indV as $key52 => $value52) {
        $final[$key52] = array_merge_recursive(json_decode(file_get_contents("$valuep5"), true), $final);
    }
file_put_contents('../json/FINISHED.json', json_encode($final, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
}

JSON 是一种传输格式。你真的不应该把它拼接成字符串。

理想情况下,您将像解析任何其他对象一样解析每个单独的 JSON 文件,assemble 您的对象,然后将其序列化为全新的 JSON.

假设 $indJson 是一个映射,其中键是主 JSON 属性 名称,值是包含内部 JSON 的文件名,这就是您的代码应该看起来像;

$final = [];
// For each file
foreach ($indJson as $keyp5 => $valuep5) {
    // Get the content of each file as an array
    $indV = json_decode(file_get_contents("$valuep5"), true);
    // Add that inner array to the final array
    $final[$keyp5] = $indV;
}
// After you finish iterating, then you can write out the master file
file_put_contents('../json/FINISHED.json', json_encode($final, 
        JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));

对未来的建议

  • 使用更有意义的变量名称,$keyp5 有点神秘,特别是当 SO 上的某个人试图快速查看您的代码并理解它时。
  • 自己调试,每次迭代
  • 打印出$final的输出