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

09.01.17

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

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

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
Все материалы к статье
.ZIP 1,33Mb
47 2 750 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

15500 руб.

02.09.2020    204614    1125    410    

1025

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

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

8400 руб.

20.08.2024    36286    209    104    

197

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

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

16000 руб.

10.11.2023    16652    72    39    

89

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    24227    63    28    

92

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

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

9360 руб.

17.05.2024    34994    125    53    

167

SALE! 30%

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    1930    1    0    

8

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

6000 руб.

07.02.2018    107543    249    100    

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

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

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

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

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

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

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

Я пишу не о языке, а о прикладных инструментах, которые обязательно потребуются для интеграции.
14. shtinalex 297 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 297 12.01.17 18:33 Сейчас в теме
(18) А вы внимательно посмотрите, там еще в роли Мелания Трамп есть )
21. UPSoft 88 13.01.17 00:06 Сейчас в теме
(19)да куда глядеть-то?? Уже разгадали... ткине уже пальцем
20. O-Planet 6432 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 6432 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 297 13.01.17 05:25 Сейчас в теме
Разгадка
23. O-Planet 6432 13.01.17 08:50 Сейчас в теме
Аааа!!! Зачем спалил!!! :D
25. artbear 1571 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 как было обещано. Где?
Оставьте свое сообщение