У меня был мастер Json, который я разделил на отдельные файлы, чтобы более точно/правильно редактировать информацию. Я сделал свои изменения и теперь хотел бы объединить их обратно в один мастер json в php. Текущий способ, который я установил, - это глотать jsons, затем делать foreach и конкатенировать, но у меня, похоже, возникают проблемы с конкатенацией. Я попробовал array_merge_recursive и сначала получил только один маленький json со значениями, установленными в null, а во второй раз я получил один набор ключей, каждый из которых имел значение, повторяющееся снова и снова. Спасибо за вашу помощь!
EDIT: У меня есть один мастер 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));
}
После того, как я их разделил, я запустил глобус и отредактировал определенные строки, чтобы получить информацию, которую я хочу. Ниже приведен код, который мне рекомендовал использовать, но он не выводит данные правильно, ни все данные, которые у меня есть:
$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));
}
Предполагая, что $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
является $keyp5
загадочным, особенно, когда кто-то из SO пытался быстро взглянуть на ваш код и понять его.$final
каждый через итерациюJSON - это транспортный формат. Вы действительно не должны сращивать его как строки.
В идеале вы будете разбирать каждый отдельный файл JSON, собирать свой объект, как и любой другой объект, а затем сериализовать его как чистый чистый JSON.
array_merge_recursive
что означает, что они уже проанализировали JSON в массив?
json_encode($object)