рекурсивное декодирование JSON при переполнении стека

У меня есть данные, сохраненные на sql, и когда я импортирую их в php и пытаюсь декодировать в объект, я нахожу небольшую проблему, потому что внутри основного объекта много объектов. У меня есть данные:

[{
"other":"{
\"father\":\"[\"father-3\",\"undefined\",\"father-class\"]\",
\"element\":\"[\"element-3\",\"height: 265px;\",\"element-class\"]\"}",
"type":"login",
"columns":4,
"offsets":0,
"order":"father,facebook,twitter,email",
"father":"{login-title}"},
{
"other":"{
\"text\":\"[\"text-4\",\"\",\"text-class\"]\",
\"element\":\"[\"element-4\",\"height: 265px;\",\"element-class\"]\"}",
"type":"text",
"columns":4,
"offsets":2,
"order":"text",
"text":"<p>hola <strong>muchachos </strong>como est&aacute;is?</p>"}]

«Другое» — это и объект внутри каждого объекта этого массива. Когда я делаю json_decode для массива, я получаю массив без проблем, но если я пытаюсь получить другой объект, я получаю NULL. Наконец я нашел решение, но я не уверен, что оно лучшее (и это причина моего вопроса):

$elements = json_decode($value);
foreach($elements as $element)
{
echo "<h1>ELEMENTO</h1>";
var_dump($element);
echo "<h1>ORIGINAL OTHER</h1>";
echo "<textarea>".$element->other."</textarea>";
$element->other = str_replace("\"]", "\\\"]",$element->other);
$element->other = str_replace("[\"", "[\\\"",$element->other);
$element->other = str_replace("\",\"", "\\\",\\\"",$element->other);
$element->other = str_replace("]\\\",\\\"", "]\",\"",$element->other);
$other = json_decode($element->other);
echo "<h1>OTHER</h1>";
echo "<textarea>".$element->other."</textarea>";
var_dump($other);
}

$ value — это исходные данные из базы данных.
Проблема, которую я думаю, состоит в том, что в ОРИГИНАЛЕ ДРУГОГО текста, показанного, нет обратной косой черты для двойных кавычек -> \ «, вместо этого я вижу следующее:

{
"father":"["father-3","undefined","father-class"]",
"element":"["element-3","height: 265px;","element-class"]"}

И по этой причине мне нужно сделать все это str_replace, которое я не люблю, и я думаю, что это должен быть другой способ сделать это.
Я смотрю, что есть $ глубина предел для декодирования функции, я думал, что это для декодирования рекурсивных объектов, но я не уверен, как это работает.

Спасибо.

0

Решение

вы должны удалить двойные кавычки при открытии и закрытии скобок и скобок вложенного объекта / массива, как это

"other":{
\"father\":[\"father-3\",\"undefined\",\"father-class\"],
\"element\":[\"element-3\",\"height: 265px;\",\"element-class\"]
},

и это должно хорошо декодировать, надеюсь, это поможет

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector