Написать раскодировщик json внутри xml

Главные вкладки

Аватар пользователя fgvlasov fgvlasov 27 апреля 2022 в 15:14

Уважаемые господа, прошу помощи. Возможно надо написать модуль, прошу предложить ваши условия.
От Поставщика заказчику пришёл файл для импорта в формате XML но, параметры внутри расписаны в формате JSON видимо для уменьшения итогового веса файла.
Я делаю импорт через Feed+Feeds_Ex , модуль Tamper тут видимо не подойдет, сильно замедлит заливку, надо перед импортом файл перекодировать и переделать на xml. Плюс там внутри русская кириллица через Unicode коды записана. Может еще какой-то вариант предложите.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<items>
  <item>
    <article>0304</article>
    <title>Линейный светильник LINE49F</title>
    <parameters>[{"option":"\u0426\u0432\u0435\u0442","parameter":"\u0447\u0435\u0440\u043d\u044b\u0439 (ral9005)"},{"option":"\u0421\u043f\u043e\u0441\u043e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438","parameter":"\u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439"},{"option":"\u0426\u0432\u0435\u0442 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f","parameter":"\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0431\u0435\u043b\u044b\u0439"},{"option":"\u0426\u0432\u0435\u0442\u043e\u0432\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, K","parameter":"4000"},{"option":"\u0421\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a, lm","parameter":"1600"},{"option":"\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, V","parameter":"230"},{"option":"\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c, \u0412\u0442","parameter":"16"},{"option":"\u041a\u043b\u0430\u0441\u0441 \u0437\u0430\u0449\u0438\u0442\u044b IP","parameter":"ip44"},{"option":"\u0412\u044b\u0441\u043e\u0442\u0430, \u043c\u043c","parameter":"35"},{"option":"\u0428\u0438\u0440\u0438\u043d\u0430, \u043c\u043c","parameter":"35"},{"option":"\u0414\u043b\u0438\u043d\u0430, \u043c\u043c","parameter":"625"}]</parameters>
  </item>
  <item>
    <article>0307</article>
    <title>Линейный светильник LINE49F (old) B 3K</title>
    <parameters>[{"option":"\u0426\u0432\u0435\u0442","parameter":"\u0447\u0435\u0440\u043d\u044b\u0439 (ral9005)"},{"option":"\u0421\u043f\u043e\u0441\u043e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438","parameter":"\u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439"},{"option":"\u0426\u0432\u0435\u0442 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f","parameter":"\u0442\u0435\u043f\u043b\u044b\u0439 \u0431\u0435\u043b\u044b\u0439"},{"option":"\u0426\u0432\u0435\u0442\u043e\u0432\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, K","parameter":"3000"},{"option":"\u0421\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a, lm","parameter":"1600"},{"option":"\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, V","parameter":"230"},{"option":"\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c, \u0412\u0442","parameter":"16"},{"option":"\u041a\u043b\u0430\u0441\u0441 \u0437\u0430\u0449\u0438\u0442\u044b IP","parameter":"ip44"},{"option":"\u0412\u044b\u0441\u043e\u0442\u0430, \u043c\u043c","parameter":"35"},{"option":"\u0428\u0438\u0440\u0438\u043d\u0430, \u043c\u043c","parameter":"35"},{"option":"\u0414\u043b\u0438\u043d\u0430, \u043c\u043c","parameter":"625"}]</parameters>
  </item>
</items>

Комментарии

Аватар пользователя ivnish ivnish 27 апреля 2022 в 15:38

Скорее всего для Feeds это будет слишком сложно. Возможно проще написать простой кастомный импортер, который будет парсить XML, а раздел parameters еще дополнительно парсить как JSON и потом уже эти данные импортировать в БД

Аватар пользователя fgvlasov fgvlasov 27 апреля 2022 в 15:42

Да, кастомное было бы лучше всего. Готов оплатить по сделке.
Там порядка 10 файлов от поставщика , они от 500 кб до 2 мб.
я кстати импортирую в Товары Commerce, тоже нюанс.