17
Апр
2017

Как заменить имя объекта в json-файле

Есть json-файл сохранённый в строке вида {"Org1":[{"a":1,"b":2},{...}...]} (название файла file.json)

Более наглядный вид:

{
"Org1": [
{
"a": 1,
"b": 2
},
{
"a": 12,
"b": 345
},
{
"a": 12364,
"b": -1
}
],
"Org2": [
]
}

Нужно изменить "Org1" на "Org123", не меняя порядка. Значения "Org1" и "Org123" в виде переменных "$SchoolOldName" и "$SchoolName" соответственное.

Проблема:

$file = "file.json";
$json = json_decode(file_get_contents("$file"), true);
$json = str_replace($SchoolOldName, $SchoolName, $json);
file_put_contents("$file", json_encode($json));

В таком варианте ничего не работает.

Если делать без json_decode/json_encode -- просто через file_get_contents, то всё работает, пока "Org1" не будет написано русскими символами. Тогда без json_encode название будет вида "\u0410\u0432\u0430\u043b\u043e\u043d" и str_replace не сработает.

Подскажите, пожалуйста, как перекодировать строку json в русский текст (чтобы она и осталась строкой, а не массивом)? Или же как сделать рабочий вариант замены значения с помощью json_decode?

Источник: https://ru.stackoverflow.com/questions/654664/%D0%9A%D0%B0%D0%BA-%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C-%D0%B8%D0%BC%D1%8F-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0-%D0%B2-json-%D1%84%D0%B0%D0%B9%D0%BB%D0%B5

Share

Тебе может это понравится...