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

09.01.17

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Все материалы к статье
.ZIP 1,33Mb
46
46 Скачать (4 SM) Купить за 2 750 руб.

При обмене между разными базами, при обмене с сайтом удобно использовать 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

См. также

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

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

12000 руб.

02.09.2020    170198    940    403    

907

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    13203    100    46    

104

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    26819    90    48    

134

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

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

22200 руб.

06.10.2023    16963    41    15    

75

SALE! %

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

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

4800 3840 руб.

14.01.2013    190755    1151    0    

918

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

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

15000 руб.

10.11.2023    11483    40    27    

66

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    953    2    0    

5

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

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

5000 руб.

07.02.2018    104010    244    100    

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

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

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

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

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

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

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

Я пишу не о языке, а о прикладных инструментах, которые обязательно потребуются для интеграции.
14. shtinalex 288 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 288 12.01.17 18:33 Сейчас в теме
(18) А вы внимательно посмотрите, там еще в роли Мелания Трамп есть )
21. UPSoft 88 13.01.17 00:06 Сейчас в теме
(19)да куда глядеть-то?? Уже разгадали... ткине уже пальцем
20. O-Planet 6452 12.01.17 18:55 Сейчас в теме
(18) В том и суть пасхалки, что ее не видно с первого взгляда ;)
10. vano-ekt 124 09.01.17 22:30 Сейчас в теме
чем встроенная платформенная json сериализация/десериализация не устраивает?
12. 1С_Мастер 61 10.01.17 09:26 Сейчас в теме
Тем, что в платформе 8.2 ее нет ;)


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

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

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

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

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