Павел
может у меня одного так
Суть в том, что это не из-за рекурсии
Владимир
Ладно. Проверю ещё раз
Павел
Там каждый последующий мигх заджейсонен)
Павел
То есть начиная с последнего джейсонится
Avent
мне кажется migx делает escape сущностей
Avent
экранирует
Павел
Потом предпоследний, получается, что последний 2 раза джейсонит
Павел
Потом предпредпоследний
Павел
И тд
Avent
то есть он JSON-ит джейсон?
Павел
Тип того
Avent
то есть надо разджейсонивать не 1 а несколько раз?
Павел
Как бэ обьяснить...
Павел
Сек
Avent
ну я понял, что он уже заджейсоненый еще раз джейсонит
Avent
типа строку с JSON преобразует в JSON
Павел
не не не
Avent
и т.д.
Павел
нет, блин!)
Павел
есть массив array1( array2() )
Павел
он сначала джейсонит array2
Павел
полуается array1( json2() )
Илья
так Disallow я понимаю что делает, а вот то что дальше, можно мне недалекаму объяснить )))
как то сталкивался с такими картинками - генерятся каким-то кешированием сервака, каким именно не разбирался, видимо disalow стоит чтобы индексировались только основные картинки, если они где то есть в явном виде.
Павел
потом джейсонит array1
Павел
а т.к. в array1 есть уже json2, то json2 становится экранированным
Павел
полуается json1( jsonjson2() )
Павел
тип того))))
Павел
хз как объяснить
Павел
может есть специальный термин для такого беспредела))))
Avent
я понял)
Павел
я его не знаю
Avent
но как решить
Павел
писать метод
Павел
или функцию
Avent
теоретически обычным рекурсивным проходом это возможно?
Павел
ходить по массиву и разджейсонивать каждый вложенный json до тех пор, пока не останутся одни массивы
Павел
блин я хз, я бы просто разворачивал в Fenom весь этот MIGX по очереди
Павел
{var $array = $migx | fromJSON} {foreach $array as $migx2} {var $array2 = $migx2 | fromJSON} {foreach $array2 as $migx3} etc... {/foreach} {/foreach}
Павел
както так
Avent
мне для Vue нужно) у меня на нем на фронте калькулятор сделан сложный
Avent
я думал проще было одним методом
Алексей
Ребята... json_decode посмотрите флаги таи есть глубина...
Павел
а, ну хз тогда, сам ковыряй)
Павел
напиши ток сначала
Avent
писал уже
Павел
но не разэкранирование заджейсоненного джейсона)))
Павел
блин ну и общение, жесть)))
Алексей
Аааа епт я ж не видел исходного джейсона)))
Avent
да я понял что это за прикол с экранированием)
Алексей
Если там краны-экраны то тут, да..
Павел
ну метод на самом деле не так трудно написать
Павел
он будет как раз работать рекурсивно
Павел
и вызываться внутри себя
Павел
!важно! только для джейсон строк
Avent
но тут как раз прикол получается) метод то я написал. Но как побороть вложенное экранирование хз)
Павел
какой метод ты написал?)
Avent
ибо с каждым уровнем количество раз применений json_decode возврастает
Павел
вложенное экранирование не надо бороть, это в мигх по-умолчанию)
Avent
function ParseNestedJSON($value, $callable) { if (is_array($value) || is_object($value)) { foreach ($value as &$prop) { $prop = ParseNestedJSON($prop, $callable); } } else { $value = call_user_func($callable, $value); } return $value; } $data = ParseNestedJSON($data, function($value) { $val = json_decode($value, true); return $val; });
Anonymous
Вы тут столько Джейсона повызывали, что сидит бедняга, от икоты заходится :-D
Павел
блин не пойму, что у тебя там делается в методе этом
Avent
в итоге получается что до определенного уровня он парсит а потом ступор
Avent
и как раз из - за проблемы вложенности экранирования
Avent
ибо он один раз разэкранировал - свою работы выполнил, и ему норм
Avent
Array ( [0] => Array ( [MIGX_id] => 1 [col_list] => Array ( [0] => Array ( [MIGX_id] => 1 [list] => [{"MIGX_id":"1","MIGX_formname":"configurator_select","label":"ПРОЦЕССОР","list":"[{\"label\":\"INTEL\\u00ae CORE\\u2122 i9-7980XE EXTREME EDITION 1\",\"value\":\"1000\",\"MIGX_id\":1},{\"label\":\"INTEL\\u00ae CORE\\u2122 i12-7980XE EXTREME EDITION 2\",\"value\":\"2000\",\"MIGX_id\":2},{\"label\":\"INTEL\\u00ae CORE\\u2122 i14-7980XE EXTREME EDITION 3\",\"value\":\"4000\",\"MIGX_id\":3}]","selected":"","cost":"","count":"","allow_count":"1","allow_multiple":"","allow_cost":""},{"MIGX_id":"3","MIGX_formname":"configurator_slider","label":"ОПЕРАТИВНАЯ ПАМЯТЬ","subtitle":"Объем","mark":"Gb","list":"","selected":"","cost":"","options":"[{\"label\":\"32\",\"value\":\"1000\",\"MIGX_id\":1},{\"label\":\"48\",\"value\":\"2000\",\"MIGX_id\":2},{\"label\":\"64\",\"value\":\"3000\",\"MIGX_id\":3},{\"label\":\"128\",\"value\":\"5000\",\"MIGX_id\":4}]","selected_options":"","cost_options":"","allow_count":"","allow_multiple":"","allow_cost":""},{"MIGX_id":"2","MIGX_formname":"configurator_select_addition","label":"ЖЕСТКИЕ ДИСКИ","list":"[{\"MIGX_id\":\"1\",\"label\":\"SATA\",\"list\":\"[{\\\"label\\\":\\\"32\\\",\\\"value\\\":\\\"1000\\\",\\\"MIGX_id\\\":1},{\\\"label\\\":\\\"64\\\",\\\"value\\\":\\\"2000\\\",\\\"MIGX_id\\\":2},{\\\"label\\\":\\\"128\\\",\\\"value\\\":\\\"5000\\\",\\\"MIGX_id\\\":3}]\"},{\"MIGX_id\":\"2\",\"label\":\"HDD\",\"list\":\"[{\\\"label\\\":\\\"512\\\",\\\"value\\\":\\\"1200\\\",\\\"MIGX_id\\\":1},{\\\"label\\\":\\\"1024\\\",\\\"value\\\":\\\"2400\\\",\\\"MIGX_id\\\":2},{\\\"label\\\":\\\"2048\\\",\\\"value\\\":\\\"5000\\\",\\\"MIGX_id\\\":3}]\"}]","selected":"","cost":"","count":"","subtitle":"","allow_count":"1","allow_multiple":"1","allow_cost":"","grow_first":""},{"MIGX_id":"4","MIGX_formname":"configurator_select_addition","label":"RAID","list":"[{\"MIGX_id\":\"1\",\"label\":\"Модуль №1\",\"list\":\"[{\\\"label\\\":\\\"1\\\",\\\"value\\\":\\\"1000\\\",\\\"MIGX_id\\\":1},{\\\"label\\\":\\\"2\\\",\\\"value\\\":\\\"2000\\\",\\\"MIGX_id\\\":2},{\\\"label\\\":\\\"3\\\",\\\"value\\\":\\\"3000\\\",\\\"MIGX_id\\\":3},{\\\"label\\\":\\\"4\\\",\\\"value\\\":\\\"4000\\\",\\\"MIGX_id\\\":4},{\\\"label\\\":\\\"5\\\",\\\"value\\\":\\\"5000\\\",\\\"MIGX_id\\\":5}]\"},{\"MIGX_id\":\"2\",\"label\":\"Модуль №2\",\"list\":\"[{\\\"label\\\":\\\"1\\\",\\\"value\\\":\\\"2000\\\",\\\"MIGX_id\\\":1},{\\\"label\\\":\\\"3\\\",\\\"value\\\":\\\"5000\\\",\\\"MIGX_id\\\":2},{\\\"label\\\":\\\"5\\\",\\\"value\\\":\\\"7000\\\",\\\"MIGX_id\\\":3}]\"}]","selected":"","cost":"","count":"","subtitle":"Level","allow_count":"","allow_multiple":"","allow_cost":"","grow_first":"1"},{"MIGX_id":"5","MIGX_formname":"configurator_separator","title":""},{"MIGX_id":"6","MIGX_formname":"configurator_radios","label":"ПОРТ ДОСТУПА В ИНТЕРНЕТ","list":"[{\"label\":\"100 Mb/s\",\"value\":\"1000\",\"MIGX_id\":1},{\"label\":\"1 Gb/s\",\"value\":\"2000\",\"MIGX_id\":2},{\"label\":\"10 Gb/s\",\"value\":\"5000\",\"MIGX_id\":3}]","count":"","cost":"","selected":"","allow_count":"1","allow_multiple":"","allow_cost":""},{"MIGX_id":"7","MIGX_formname":"configurator_select","label":"ТРАФИК","list":"[{\"label\":\"Неограниченный трафик 100 Мб/c\",\"value\":\"1000\",\"MIGX_id\":1},{\"label\":\"Неограниченный трафик 1 Гб/с\",\"value\":\"5000\",\"MIGX_id\":2},{\"label\":\"Неограниченный трафик 10 Гб/с\",\"value\":\"10000\",\"MIGX_id\":3}]","selected":"","cost":"","count":"","allow_count":"","allow_multiple":"","allow_cost":""},{"MIGX_id":"8","MIGX_formname":"configurator_slider","label":"IPv4","subtitle":"Количество","mark":"штук","list":"[{\"label\":\"32\",\"value\":\"1000\",\"MIGX_id\":1},{\"label\":\"64\",\"value\":\"2000\",\"MIGX_id\":2},{\"label\":\"128\",\"value\":\"3000\",\"MIGX_id\":3}]","selected":"","cost":"","options":"[{\"label\":\"IPv6\",\"value\":\"100\",\"MIGX_id\":1},{\"label\":\"Порт IPMI / iLo /
Avent
iDrac\",\"value\":\"200\",\"MIGX_id\":2}]","selected_options":"","cost_options":"","allow_count":"","allow_multiple":"","allow_cost":""},{"MIGX_id":"9","MIGX_formname":"configurator_separator","title":""},{"MIGX_id":"10","MIGX_formname":"configurator_slider","label":"FTP (Backup)","subtitle":"Объем","mark":"Gb","list":"[{\"label\":\"32\",\"value\":\"2000\",\"MIGX_id\":1},{\"label\":\"48\",\"value\":\"4000\",\"MIGX_id\":2},{\"label\":\"64\",\"value\":\"5000\",\"MIGX_id\":3}]","selected":"","cost":"","options":"","selected_options":"","cost_options":"","allow_count":"","allow_multiple":"","allow_cost":""}] ) ) ) [1] => Array ( [MIGX_id] => 2 [col_list] => Array ( [0] => Array ( [MIGX_id] => 1 [list] => [{"MIGX_id":"1","MIGX_formname":"configurator_select","label":"Операционная система","list":"[{\"label\":\"Windows Server 2012 R2\",\"value\":\"1000\",\"MIGX_id\":1},{\"label\":\"Windows Server 2010 R2\",\"value\":\"800\",\"MIGX_id\":2},{\"label\":\"Windows Server 2008 R2\",\"value\":\"700\",\"MIGX_id\":3}]","selected":"","cost":"","count":"","allow_count":"","allow_multiple":"","allow_cost":""},{"MIGX_id":"2","MIGX_formname":"configurator_select","label":"ЗАЩИТА ОТ DDOS","list":"[{\"label\":\"\\u041a\\u0430\\u043d\\u0430\\u043b \\u0441 \\u0437\\u0430\\u0449\\u0438\\u0442\\u043e\\u0439 \\u043e\\u0442 DDOS 5 \\u041c\\u0431\\/\\u0441\\u0435\\u043a\",\"value\":\"1000\",\"MIGX_id\":1},{\"label\":\"\\u041a\\u0430\\u043d\\u0430\\u043b \\u0441 \\u0437\\u0430\\u0449\\u0438\\u0442\\u043e\\u0439 \\u043e\\u0442 DDOS 10 \\u041c\\u0431\\/\\u0441\\u0435\\u043a\",\"value\":\"2000\",\"MIGX_id\":2},{\"label\":\"\\u041a\\u0430\\u043d\\u0430\\u043b \\u0441 \\u0437\\u0430\\u0449\\u0438\\u0442\\u043e\\u0439 \\u043e\\u0442 DDOS 15 \\u041c\\u0431\\/\\u0441\\u0435\\u043a\",\"value\":\"3000\",\"MIGX_id\":3}]","selected":"","cost":"","count":"","allow_count":"","allow_multiple":"","allow_cost":""}] ) [1] => Array ( [MIGX_id] => 2 [list] => [{"MIGX_id":"1","MIGX_formname":"configurator_select","label":"ПАНЕЛЬ УПРАВЛЕНИЯ","list":"[{\"label\":\"Без панели управления\",\"value\":\"0\",\"MIGX_id\":1},{\"label\":\"ISP Manager\",\"value\":\"500\",\"MIGX_id\":2},{\"label\":\"ISP Manager Megalite\",\"value\":\"300\",\"MIGX_id\":3}]","selected":"","cost":"","count":"","allow_count":"","allow_multiple":"","allow_cost":""},{"MIGX_id":"2","MIGX_formname":"configurator_select","label":"АДМИНИСТРИРОВАНИЕ СЕРВЕРА","list":"[{\"label\":\"Стандартный уровень\",\"value\":\"100\",\"MIGX_id\":1},{\"label\":\"Средний уровень\",\"value\":\"200\",\"MIGX_id\":2},{\"label\":\"Божественный уровень\",\"value\":\"300\",\"MIGX_id\":3}]","selected":"","cost":"","count":"","allow_count":"","allow_multiple":"","allow_cost":""}] ) ) ) )
Павел
да просто функция корявая)
Павел
сек))
Павел
надо так: function fromMigxJson($data) { if (is_array($data)) { foreach ($data as &$v) { $v = fromMigxJson($v); } unset($v); } elseif(is_string($data) && isJSON($data)) { $data = json_decode($data); } return $data; } function isJSON($string) { return ((is_string($string) && (is_object(json_decode($string)) || is_array(json_decode($string))))) ? true : false; }
Павел
там функция isjson, но можно без неё иначе проверять json на валид
Павел
так по идее должно работать
Avent
блин я тоже уже решил)
Avent
ща твой метод проверю
Avent
у меня немного другой фикс
Павел
првоерь, интересно)