Владимир
Ладно. Проверю ещё раз
Павел
Там каждый последующий мигх заджейсонен)
Павел
То есть начиная с последнего джейсонится
Avent
мне кажется migx делает escape сущностей
Avent
экранирует
Павел
Потом предпоследний, получается, что последний 2 раза джейсонит
Павел
Потом предпредпоследний
Павел
И тд
Avent
то есть он JSON-ит джейсон?
Павел
Тип того
Avent
то есть надо разджейсонивать не 1 а несколько раз?
Павел
Как бэ обьяснить...
Павел
Сек
Павел
Avent
ну я понял, что он уже заджейсоненый еще раз джейсонит
Avent
типа строку с JSON преобразует в JSON
Павел
не не не
Avent
и т.д.
Павел
нет, блин!)
Павел
есть массив array1(
array2()
)
Павел
он сначала джейсонит array2
Павел
полуается array1(
json2()
)
Павел
потом джейсонит 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
но тут как раз прикол получается) метод то я написал. Но как побороть вложенное экранирование хз)
Павел
какой метод ты написал?)
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
у меня немного другой фикс
Павел
првоерь, интересно)