JSON парсер для профессиональных разработчиков

09.01.17

Разработка - Инструментарий разработчика

Описана методика создания парсеров json-файлов для любой конфигурации 1С. Приложена тестовая конфигурация и обработки-парсеры для обычного и управляемого приложений. Материал предназначен для разработчиков на базе 1С, занимающихся вопросами автоматизации бизнес процессов, обмена данными, сопряжения 1С с web-сайтами и сервисами.

Скачать файлы

Наименование Файл Версия Размер
Все материалы к статье
.ZIP 1,33Mb
45
.ZIP 1,33Mb 45 Скачать

При обмене между разными базами, при обмене с сайтом удобно использовать json-формат представления данных. Но работа с json в 1С сопряжена с некоторыми сложностями. Во-первых, и это главное, далеко не все платформы поддерживают работу с json. Во-вторых, я не видел пока универсальных парсеров json-файлов в 1С. И, в-третьих, что субъективно, разработчики 1С усложнили и загромоздили функциональность, относящуюся к работе с json.

Предлагается альтернативная методика загрузки данных из json-файлов в 1С. Она имеет определенные преимущества, и прежде всего – это возможность работать с любой платформой 1С, даже 1С:Предприятие 77. Но это даже не главное. Предлагаемый подход имеет универсальность, наглядность и простоту, что позволяет создавать сервисы обмена на порядок быстрее, чем типовыми методами.

Всем разработчиками по материалам этой статьи будут предложены готовые шаблоны для ваших разработок.

Что такое, JSON

JSON - удобный формат представления данных. Он сводится к структуре вида:

{ "ИМЯ" :"ЗНАЧЕНИЕ", … "ИМЯ" :"ЗНАЧЕНИЕ" }

При этом, ЗНАЧЕНИЕ может также быть json-структурой. Кто знаком с языком java, да и просто с ООП, тот без труда увидит в предложенном подходе схожесть с описанием объектов, и будет прав.

Стоит отметить, что как и xml, json-объект может быть представлен в виде дерева.

JSON в виде списка

Наш метод будет основан на преобразование древовидной структуры json в линейную. Делается это с использованием полного пути к реквизитам. Как далее увидим, это позволит выполнять обработку быстрее, чем при объектном подходе.

Пример:

{
   "firstName": "Иван",
   "lastName": "Иванов",
"address": {
    "streetAddress": "Московскоеш., 101, кв.101",
    "city": "Ленинград",
    "postalCode": 101101
   },
"phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}

В линейном представлении данная json-структура предстанет в виде:

firstName: "Иван",
lastName: "Иванов",
address.streetAddress: "Московское ш., 101, кв.101",
address.city: "Ленинград ",
address.postalCode: "101101",
phoneNumbers: [ "812 123-1234",  "916 123-4567"]

Для того чтобы получить данные, например, по адресу, достаточно пройти список и выбрать строки, левая часть полного пути в которых соответствует "address." В итоге, выборку любой сложности можно сделать в один проход по списку, зная лишь полный путь к узлу. И что говорить, организация и хранение линейной структуры в памяти намного проще, чем вложенной и объектной.

Правила разбора

Для работы с json-файлами будем использовать не сложный макроязык, реализованный xml-директивами. По идее, ни что не мешает работать с адаптированным диалектом бейсика или паскаля, но xml проще обрабатывать в 1С.

Приведем пример директив для разбора json-файла, который не требует подробных комментариев.

{
  "sotr1" : { "name" : "Обама" },
  "sotr2" : { "name" : "Путин" },
  "sotr3" : { "name" : "Коноплев" }
}

// Из исходной таблицы берем очередную строку по ключу sotr с индексом 1, 2, 3 ...
<СКОПИРОВАТЬ РЕЗУЛЬТАТ = "Сотрудник" ИСТОЧНИК = "Исходная" КЛЮЧ = "sotr[N]" СТАРТ = "1" МЕТКА = "Сотр" ДАЛЕЕ = "Завершить"/>
// Ищем в справочнике сотрудников по наименованию элемент по атрибуту name из прочитанной json-строки
<УСТАНОВИТЬ РЕЗУЛЬТАТ = "Спр" ИСТОЧНИК = "Сотрудник" ОБЪЕКТ = "Справочники.Сотрудники" ПОИСК = "Наименование" КЛЮЧ = "name">
   // Создаем в переменной Стр новый элемент справочника Сотрудники
   <СОЗДАТЬ РЕЗУЛЬТАТ = "Спр" ОБЪЕКТ = "Справочники.Сотрудники"/>
   // Присваиваем наименование нового элемента из строки json по ключу name
   <УСТАНОВИТЬ РЕЗУЛЬТАТ = "Спр.Наименование" ИСТОЧНИК = "Сотрудник" КЛЮЧ = "name" />
   // Сохраняем созданный элемент справочника
   <ЗАПИСАТЬ РЕЗУЛЬТАТ = "Спр" />
</УСТАНОВИТЬ>
// Переходим к чтению очередной строки из исходной таблицы
<ПЕРЕЙТИ КМЕТКЕ = "Сотр" />
// Директива, куда переходим, когда больше строк нет
<НИЧЕГО МЕТКА = "Завершить"/>

Далее будет приведено краткое описание всех реализованных нами директив. В прилагаемом архиве имеется их подробное описание с примерами использования.

ОписаниеXML-директив разбора JSON

Выборка из таблицы

<СКОПИРОВАТЬ ИСТОЧНИК="…" РЕЗУЛЬТАТ="…" КЛЮЧ="…">
<СКОПИРОВАТЬ ИСТОЧНИК="…" РЕЗУЛЬТАТ="…" КЛЮЧ="Имя[N]" СТАРТ = "..." МЕТКА = "…" ДАЛЕЕ = "…">

Создание экземпляра объекта метаданных

<СОЗДАТЬ РЕЗУЛЬТАТ = "…" ОБЪЕКТ = "…" />

Создание строки табличной части

<СОЗДАТЬСТРОКУ РЕЗУЛЬТАТ = "…" ИСТОЧНИК = "…" />

Запись данных

<ЗАПИСАТЬ РЕЗУЛЬТАТ = "…">

Интерпретация данных, установка значений переменных и реквизитов

<УСТАНОВИТЬ РЕЗУЛЬТАТ = "…" ЗНАЧЕНИЕ = "…" />
<УСТАНОВИТЬ РЕЗУЛЬТАТ = "…" ИСТОЧНИК = "…" КЛЮЧ = "…" />
<УСТАНОВИТЬ РЕЗУЛЬТАТ = "…" ОБЪЕКТ = "…" ПОИСК = "…" ЗНАЧЕНИЕ = "…" />
<УСТАНОВИТЬ РЕЗУЛЬТАТ = "…" ОБЪЕКТ = "…" ПОИСК = "…" ИСТОЧНИК = "…" КЛЮЧ = "…"/>

Безусловный переход

<ПЕРЕЙТИ КМЕТКЕ = "…" />

Условный оператор

<ЕСЛИ ПЕРЕМ1 = "…" ПЕРЕМ2 = "…" ОПЕР = "…" ИНАЧЕ = "…">

</ЕСЛИ>

Пустая директива

<НИЧЕГО />

Приведенного набора директив достаточно для реализации практически любого алгоритма парсинга с созданием объектов конфигурации 1С: элементов справочников, документов.

Немного о дешифровке JSON

В последних версиях платформы 1С реализованы методы и объекты для разбора json-данных. Мы используем в наших примерах более продвинутые технологии, что дает возможность использовать их на более ранних платформах. Известно, что в php работа с json была реализована достаточно давно. Поэтому, для расшифровки json будем использовать простой php-скрипт, размещенный на любом доступном нам web-сервере. Мы для этих целей используем наш сайт, а скрипт размещаем по адресу:

http://www.o-planet.ru/ex/jsonparse.php

Для иллюстрации работы скрипта введите в строке браузера:

http://www.o-planet.ru/ex/jsonparse.php?json={"sotr1":{"name":"Обама"},"sotr2":{"name":"Путин"},"sotr3":{"name":"Коноплев"}}

Прилагаемый архив

В прилагаемом архиве находятся:

  • Тестовая конфигурация для обычного и управляемого приложения
  • Обработка загрузки для обычного приложения
  • Обработка загрузки для управляемого приложения
  • Серверныйphp-скрипт для дешифровке json
  • Тестовый пример jsonдля загрузки в тестовую конфигурацию
  • Подробное описание XML-директив загрузки с примерами

Надеемся, что наши материалы помогут разработчикам в реализации их проектов. Будем рады ответить на ваши вопросы.

Если Вам требуется интеграция 1С с внешними ресурсами, разработка web-сервисов, мы готовы в рамках партнерства с Инфостарт обсудить и выполнить Ваш проект. 

Коллектив ООО "О-Планет"

PS А тому, кто первым найдет в этой статье пасхалку - наш маленький приз!

json парсер web обмен с сайтом парсинг обработка данных разработка www.o-planet.ru

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119932    656    389    

701

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7011    20    6    

37

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    3250    10    1    

31

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177344    1070    0    

846

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99205    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    17914    6    8    

38

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    27945    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23491    15    15    

31
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ЕленаГр 09.01.17 15:11 Сейчас в теме
Это любой документ можно будет описать таким образом?
5. O-Planet 6431 09.01.17 16:33 Сейчас в теме
(1) Любой документ, справочник. В планах добавить работу с регистрами сведений. А вообще это - более простая альтернатива типовых правил обмена. Ведь сгенерировать выгрузку и директивы для переноса данных в идентичную конфигурацию вообще не сложно.
2. Амарис 09.01.17 15:15 Сейчас в теме
Плюсую. Пригодится. Интересно было бы сразу разбирать в дерево. Даже пример со скриншотов деревом бы лучше смотрелся.
3. Velostrannik 202 09.01.17 16:15 Сейчас в теме
О! Как раз хотел разобраться с этой темой!
4. O-Planet 6431 09.01.17 16:32 Сейчас в теме
Интересно, пасхалку кто-нибудь найдет? :) Сразу скажу, это не "Обама, Путин, Коноплев"
6. Paradise.87 09.01.17 17:12 Сейчас в теме
7. O-Planet 6431 09.01.17 18:59 Сейчас в теме
8. kembrik 10 09.01.17 19:09 Сейчас в теме
Кроме пары пропущенных пробелов- ничего не видно :)
9. shtinalex 269 09.01.17 19:50 Сейчас в теме
Наверное нет, но все же: Матрица 5: Русский Мир,продюсер Никита Михалков, оно?
11. O-Planet 6431 10.01.17 05:25 Сейчас в теме
(9) Ааа!!! Я не думал, что это будет так просто. Да, оно. Пиши, куда флешку прислать ))) Но там пасхалка Михалковым не заканчивается. Он интересный актерский состав пригласил на этот шедевр ...

(10) Тем, что в платформе 8.2 ее нет ;)
13. VitaliyCeban 461 10.01.17 10:04 Сейчас в теме
(11) В таком случае, чем Ваша разработка лучше проверенной годами http://infostart.ru/public/119601/ ?
15. kostik_love 308 10.01.17 11:38 Сейчас в теме
(13) Там не было пасхалки)
24. artbear 1447 16.01.17 12:39 Сейчас в теме
Поддержу (13)
ИМХО http://infostart.ru/public/119601/ очень полезна, т.к. выполняет свою одну, единственную задачу - разбирает json и получает выходные данные.

А в текущей обработке идет смешивание разных задач:
+ разбор json
+ интеграция/конвертация данных

В процессе интеграции наверняка выяснится, что недостаточно возможностей указанного dsl-языка для обработки всех нужд интеграции, и нужно будет как-то встраиваться в указанный dsl-код и добавлять код 1С :(
в итоге будет вырождение в ту самую КД :)
и придется выполнять постоянные допилки.

DSL - Предметно-ориентированный язык - англ. Domain-specific language

ИМХО микросервисы рулят, да и принцип единой ответственности никто не отменял.

ЗЫ кстати, я плюсанул разработку, т.к. согласен, что чем больше разработок на тему, тем лучше.
26. O-Planet 6431 16.01.17 16:27 Сейчас в теме
(24) Язык на уровне васика (basic), он не может быть недостаточен. При переносе доков уже столкнулись с тем, что нужно вызывать разные "ПриИзмененииНоменклатуры", когда данных не достаточно. Думаю, как это сделать универсальным. А что касается смешивания технологий, так это плюс. На стыке технологий и рождаются интересные решения.
27. artbear 1447 16.01.17 23:34 Сейчас в теме
(26) >Язык на уровне васика (basic), он не может быть недостаточен.

Я пишу не о языке, а о прикладных инструментах, которые обязательно потребуются для интеграции.
14. shtinalex 269 10.01.17 11:37 Сейчас в теме
(11) Олег, напишите об этом шедевре, что-то не могу найти информацию в интернете, любопытно )
28. Probot1c 04.02.17 06:14 Сейчас в теме
(11)
то это будет так просто. Да, оно. Пиши, куда флешку прислать ))) Но там пасхалка Михалковым не заканчивается.


А приз всего лишь 1?
18. UPSoft 88 12.01.17 14:58 Сейчас в теме
(9)
Матрица 5: Русский Мир,продюсер Никита Михалков

ничо не понял ГДЕ вы это разглядели?? О_О
19. shtinalex 269 12.01.17 18:33 Сейчас в теме
(18) А вы внимательно посмотрите, там еще в роли Мелания Трамп есть )
21. UPSoft 88 13.01.17 00:06 Сейчас в теме
(19)да куда глядеть-то?? Уже разгадали... ткине уже пальцем
20. O-Planet 6431 12.01.17 18:55 Сейчас в теме
(18) В том и суть пасхалки, что ее не видно с первого взгляда ;)
10. vano-ekt 123 09.01.17 22:30 Сейчас в теме
чем встроенная платформенная json сериализация/десериализация не устраивает?
12. 1С_Мастер 61 10.01.17 09:26 Сейчас в теме
Тем, что в платформе 8.2 ее нет ;)


А разве переход на актуальную платформу, пусть в режиме совместимости с 8.2, не будет проще, чем изобретение велосипеда?

16. O-Planet 6431 10.01.17 13:33 Сейчас в теме
(12) Некоторые клиенты бывают против перехода на актуальную платформу. И потом, json, реализованный средствами php, мне кажется предпочтительнее, чем платформенный в 1С.
(13) Ну ничего не меняется на инфостарте! Вопросы те же в 2017, что и в 2006... Может, она и не лучше, а может, лучше. Но если не пытаться, то не будет разработок, проверенных годами. Второй вариант ответа: тем, что это - наша разработка.
(14) Думаю Н.Михалков вынашивает пока идею этого проекта и скоро сам расскажет все. Лишь бы пол не поменял потом...
JohnyDeath; +1 Ответить
17. JohnyDeath 301 10.01.17 16:09 Сейчас в теме
(16) пусть меняет. Никто особо и не расстроится )
22. shtinalex 269 13.01.17 05:25 Сейчас в теме
Разгадка
23. O-Planet 6431 13.01.17 08:50 Сейчас в теме
Аааа!!! Зачем спалил!!! :D
25. artbear 1447 16.01.17 12:41 Сейчас в теме
Ну и плюс общая схема - 1С + веб-сервер + php - выглядит как-то сложновато :(
29. kote 536 20.02.17 11:09 Сейчас в теме
.. по моему скромному мнению - использование python - вместо php, и использование команд ОС и обмен через файл со скриптом - было бы практичнее, проще, быстрее и не менее "кроссплатформеннее" :)

К тому же - работа с файлом на стороне сервера - производительнее в разы, чем с вэбсервером (который может даже быть недоступен порой)

Всё ИМХО, конечно же

30. kolchinab 23.07.20 19:03 Сейчас в теме
Я не нашел в полученном архиве обработки .ert как было обещано. Где?
Оставьте свое сообщение