我拆分了一个大 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
的输出
我有一个母版 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
的输出