Парсинг циклических данных в [HANDLEJSON] и вывод их через PHP_SCRIPT в mysql

Тема в разделе "Шаблон вывода", создана пользователем yup, 29 ноя 2021.

  1. yup

    yup Member Пользователи

    Регистрация:
    20 июн 2012
    Сообщения:
    44
    Подскажите пожалуйста, как правильно построить (и можно ли ее вообще так построить) конструкцию парсинга циклических данных из JSON и запись их в mysql.
    Попробовал конструкцию
    Код:
    [HANDLEJSON_F]
    {OUT_TEMPLATE}{LIST(*loads)}
    <PHP_SCRIPT=http://192.168.88.242/ATI2/15.php[UTF-8]>
    <HEADERS></HEADERS>
    <REPLACE></REPLACE>
    N1={KEY(id)}
    N2={KEY(loadNumber)}
    N3={KEY(loadingTypes)}
    N4={KEY(unloadingTypes)}
    </PHP_SCRIPT>
    {/LIST}{/OUT_TEMPLATE}
    {VALUES_REPLACE}{/VALUES_REPLACE}
    {PARAMS}values_json_decode{/PARAMS}
    {LIST_SEP}{br2}{/LIST_SEP}
    {JSON_DATA}
    
    [DOCSOURCE]
    
    {/JSON_DATA}
    [/HANDLEJSON_F]
    
    но она выводит в базу текст "{KEY(id)}" и т.д. вместо значений. Причем выводит 1 раз (1 строку)
    Если PHP_SCRIPT поставить снаружи HANDLEJSON то тоже ничего не получается. Что то не соображу как быть. В голову приходит вариант записывать в .csv и потом уже из него импортировать в mysql, но это же костыль!
     
  2. yup

    yup Member Пользователи

    Регистрация:
    20 июн 2012
    Сообщения:
    44
    Сорри, разобрался. Надо было разобраться с порядком выполнения скриптов. Конструкция
    Код:
    [HANDLEJSON]{OUT_TEMPLATE}{LIST(*loads)}
    <PHP_SCRIPT_3=http://192.168.88.242/ATI2/15.php[UTF-8]>
    <HEADERS></HEADERS>
    N1={KEY(id)}
    N2={KEY(loadNumber)}
    N3={KEY(loadingTypes)}
    N4={KEY(unloadingTypes)}
    </PHP_SCRIPT_3>
    {/LIST}{/OUT_TEMPLATE}
    {VALUES_REPLACE}{/VALUES_REPLACE}
    {PARAMS}values_json_decode{/PARAMS}
    {LIST_SEP}{br2}{/LIST_SEP}
    {JSON_DATA}
    
    [DOCSOURCE]
    
    {/JSON_DATA}
    [/HANDLEJSON]
    
    работает нормально
     
    Root нравится это.
  3. yup

    yup Member Пользователи

    Регистрация:
    20 июн 2012
    Сообщения:
    44
    Что то никак не осилю синтаксис вложенных циклов внутри JSON
    Посредством нескольких (в примере - двух) <GETMORECONTENT> получаю с одного и того же урл но с разными POST несколько JSON. Объединяю их в один посредством простановки общих {} в начале и конце массива данных. Получаю такую картинку:
    41.jpg
    Мне нужно получать с помощью KEY циклические данные, находящиеся внути [loads]. В свою очередь у меня есть несколько loads, полученных каждый из своего <GETMORECONTENT>.
    Пытаюсь применить конструкцию
    Код:
    [HANDLEJSON]{OUT_TEMPLATE}{LIST()}{LIST(*>loads)}
    <PHP_SCRIPT_3=http://192.168.88.242/ATI2/15.php[UTF-8]>
    <HEADERS></HEADERS>
    N1={KEY(id)}
    N2={KEY(loadNumber)}
    </PHP_SCRIPT_3>
    {/LIST}{/LIST}{/OUT_TEMPLATE}
    {VALUES_REPLACE}{/VALUES_REPLACE}
    {PARAMS}values_json_decode{/PARAMS}
    {LIST_SEP}{br2}{/LIST_SEP}
    {JSON_DATA}
    
    [DOCSOURCE]
    
    {/JSON_DATA}
    [/HANDLEJSON]
    получаю
    42.jpg
    Т.е. узел для цикла loads задан, получается, неправильно.
    Я перепробовал различные варианты синтаксиса:
    Код:
    {LIST(...>...)}{LIST(loads)}
    {LIST(...>...)}{LIST(*loads)}
    {LIST()}{LIST(...>loads)}
    {LIST()}{LIST(*loads)}
    {LIST()}{LIST(...>*loads)}
    {LIST(...)}{LIST(*>loads)}
    ну и еще кучу разных вариантов - результат отрицательный.
    Если оставить один цикл {LIST(*loads)} то он отрабатывает нормально, но, вполне естественно, забирает только 13 циклических значений из первого loads и не видит остальные.

    Как же всетаки правильно написать конструкцию вложенного цикла в моем случае?

    Во вложении, на всякий случай, текстовый файл с JSON из двух <GETMORECONTENT> (ну т.е. данные с первой картинки).
     

    Вложения:

  4. yup

    yup Member Пользователи

    Регистрация:
    20 июн 2012
    Сообщения:
    44

    В этом видео с примером имхо очень похожая ситуация и нормально работает конструкция
    {LIST()}{LIST(version)} (у меня по аналогии это будет {LIST()}{LIST(loads)}). Но почему у меня то это не работает?
     
  5. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Код:
    [HANDLEJSON]
    {OUT_TEMPLATE}{LIST()}{LIST(*Loads)}{KEY(Country)}[CSVCS]{KEY(CargoType)}{/LIST}{/LIST}{/OUT_TEMPLATE}
    ▒{KEY()}
    ▒{KEY({LEVEL})}
    
    {VALUES_REPLACE}{/VALUES_REPLACE}
    {PARAMS}values_json_decode{/PARAMS}
    {LIST_SEP}[CSVLB]{/LIST_SEP}
    {JSON_DATA}
    
    ...
    
    {/JSON_DATA}
    [/HANDLEJSON]
     
  6. yup

    yup Member Пользователи

    Регистрация:
    20 июн 2012
    Сообщения:
    44
    Блин!!! Вот я отжег! Прям как в анекдоте: искал не там где потерял а там где светло. Конструкция {LIST()}{LIST(*Loads)} самая очевидная и я ее, разумеется, попробовал (и кучу раз перепробовал) первой. Но вся проблема заключалась в том, что я ее применял совсем не к тому к чему думал :) Мой изначальный шаблон вывода был такой:
    Код:
    {<GETMORECONTENT>...</GETMORECONTENT>
    <GETMORECONTENT>...</GETMORECONTENT>}
    
    [HANDLEJSON]
    {OUT_TEMPLATE}{LIST()}{LIST(*Loads)}
    {KEY(Country)}
    {/LIST}{/LIST}{/OUT_TEMPLATE}
    
    
    {VALUES_REPLACE}{/VALUES_REPLACE}
    {PARAMS}values_json_decode{/PARAMS}
    {LIST_SEP}[CSVLB]{/LIST_SEP}
    {JSON_DATA}
    
    [DOCSOURCE]
    
    {/JSON_DATA}
    [/HANDLEJSON]
    и я считал что применяю [HANDLEJSON] к тому что перед этим получает <GETMORECONTENT>. А на самом деле [DOCSOURCE] это то что изначально получает CD по заданной ссылке и настроенной в параметрах программы передаче POST данных. А там у меня возвращался один запрос, точно такой же как первый <GETMORECONTENT> :(

    Стоило переделать на
    Код:
    [HANDLEJSON]
    {OUT_TEMPLATE}{LIST()}{LIST(*Loads)}
    {KEY(Country)}
    {/LIST}{/LIST}{/OUT_TEMPLATE}
    
    
    {VALUES_REPLACE}{/VALUES_REPLACE}
    {PARAMS}values_json_decode{/PARAMS}
    {LIST_SEP}[CSVLB]{/LIST_SEP}
    {JSON_DATA}
    
    {<GETMORECONTENT>...</GETMORECONTENT>
    <GETMORECONTENT>...</GETMORECONTENT>}
    
    {/JSON_DATA}
    [/HANDLEJSON]
    а ссылку в CD заменить на пустую и все заработало как и должно :)
    Блин, столько времени в пустую угробил :(
     

Поделиться этой страницей