Я разделил большой файл Json, чтобы более правильно редактировать информацию. Теперь, когда я его отредактировал, как я могу слить их обратно в php?

1

У меня был мастер 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));
}
  • 0
    когда вы разбивали файл, делали ли вы это с помощью php / javascript или просто с помощью какого-либо текстового редактора? Является ли каждый из разделенных файлов действительным json сам по себе или вы просто скопировали куски из файла? Разве какие-то ваши правки сломали JSON такими вещами, как кавычки, двоеточия или фигурные скобки?
  • 0
    Вы сказали, что разбили строку, а затем отредактировали ее в php. Если это так, вы можете перекодировать строку обратно в JSON, если это массив, использующий что-то вроде json_encode($object)
Показать ещё 2 комментария
Теги:
foreach
glob
merge

2 ответа

0
Лучший ответ

Предполагая, что $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 каждый через итерацию
  • 0
    Спасибо, что сработало! Спасибо за совет, я относительно новичок во всем этом, так что это помогает!
1

JSON - это транспортный формат. Вы действительно не должны сращивать его как строки.

В идеале вы будете разбирать каждый отдельный файл JSON, собирать свой объект, как и любой другой объект, а затем сериализовать его как чистый чистый JSON.

  • 0
    Я думаю, что это делает ОП. Они упоминают array_merge_recursive что означает, что они уже проанализировали JSON в массив?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню