У меня есть строка json, которую я должен редактировать, а затем преобразовать обратно в json. Но, к сожалению, я не могу восстановить структуру json.json structure difference after edits
Структура исходной строка JSON ($ JSON):
"[{"Language":{"0":"EN"},"Text":{"0":"xxx"},"ContentType":{"0":"PlainText"}},
{"Language":{"0":"DE"},"Text":{"0":"xxx"},"ContentType":{"0":"PlainText"}},
{"Language":{"0":"FR"},"Text":{"0":"xxx"},"ContentType":{"0":"PlainText"}}]"
Структура я получаю после моих изменений ($ newJson):
"{"0":{"Language":{"0":"EN"},"Text":{"0":"yyy"},"ContentType":{"0":"PlainText"}},
"1":{"Language":{"0":"DE"},"Text":{"0":"yyy"},"ContentType":{"0":"PlainText"}},
"2":{"Language":{"0":"FR"},"Text":{"0":"yyy"},"ContentType":{"0":"PlainText"}}}"
Вот что я делаю со своими правками :
$jsonArray = object_to_array(json_decode($json));
$editedJsonArray = someLoopStuff($jsonArray);
$newJson = json_encode(array_to_object(($editedJsonArray)));
function object_to_array($obj) {
if(is_object($obj)) $obj = (array) $obj;
if(is_array($obj)) {
$new = array();
foreach($obj as $key => $val) {
$new[$key] = $this->object_to_array($val);
}
}
else $new = $obj;
return $new;
}
function array_to_object($a) {
if (is_array($a)) {
foreach($a as $k => $v) {
$a[$k] = $this->array_to_object($v);
}
return (object) $a;
}
return $a;
}
У вас есть идея, как я могу получить ту же структуру, что и оригинальный json?
Спасибо, что указал мне в правильном направлении. Но теперь я получаю '{" Язык ": [" EN "]," Текст ": [" xxx "]," ContentType ": [" PlainText "]}' вместо '{" Language ": {" 0 ": "EN"}, "Текст": { "0": "ххх"}, "ТипСодержимого": { "0": "PlainText"}} '. Есть идеи, как это исправить? – Sebsemillia
@Sebsemillia Я только что обновил свой ответ. – marian0
Большое спасибо! – Sebsemillia