15.11.2019 Вадим Хоменко 53123
Варианты работы с форматом данных JSON

Содержание

1.       История формата данных JSON

2.       Описание JSON для 1С 8.3

3.       Работа с JSON

4.       Особенности работы 1С JSON

 

В этой статье рассмотрим формат данных JSON. Что это за формат, когда он появился и где используется, зачем, а главное, как работать с программой 1С в нем? Поехали! 

 

1.    История формата данных JSON


Формат JSON, JavaScriptObjectNotation (в дословном переводе - «запись объектов ЯваСкрипта») был придуман Дугласом Крокфордом в 2002 году и в 2006-ом был официально стандартизирован как формат RFC 4627. Отчасти он схож с форматом XML 1С 8.3, но является более простым и легким в использовании.  

 

2.    Описание JSON для 1С 8.3.


JSON представляет собой текстовый формат данных, MIME-тип application/json.
Он может хранить примитивные типы данных, такие как строка, число и логические значения (булево, null). Значения представляются в виде многомерных структур {"ключ": "значение"} и массивов ["значение1", "значение2"]. Его можно легко прочитать и отредактировать, просто открыв файл в текстовом редакторе.  

 

3.    Работа с JSON


На сегодняшний день формат поддерживается всеми популярными браузерами. Широко применяется в веб-приложениях и для обмена данными между серверами посредством HTTP-соединений. Библиотеки для работы с JSON включены во все современные языки программирования, что делает его идеальным форматом обмена для программных продуктов, написанных на различных языках.


Теперь становится понятно, что такое JSON для 1С 8.3. Это:

- обмен данными с сайтом;

- взаимодействие с веб интерфейсами RESTAPI;

- обмен данными со сторонним программным обеспечением.


Также формат может быть использован исключительно для 1С, например для реализации собственного уникального HTTP интерфейса конфигурации или организации обмена между базами 1С.

 

Есть несколько способов формирования файла JSON в 1С. Здесь мы рассмотрим три основных, которыми я и сам чаще всего пользуюсь. Также отмечу особенности каждого из них.


Способ 1. Объектный.
Он наиболее простой и использовался мной намного чаще других. Особенность его в формировании всего файла целиком, что при объемных данных даст снижение скорости обработки и больший расход памяти. Это надо учитывать!


Пример записи:




В результате имеем строку следующего формата:


{"Фамилия": "Петров",

"Имя": "Петр",

"АктивныйПользователь": true,

"Телефоны": [

123456,

"123456",

null]

}

 

Сразу видно, что сериализатор определил наличие структуры и массива, корректно распознал типы: булево (true), число (123456), строку ("123456") и Неопределено (null).

Пример чтения:




В результате получим обратно такие же данные:




Единственное, как видим, порядок элементов в структуре изменился, а в массиве – нет. Это обязательно нужно учитывать.

Способ 2. Потоковый.
Его отличие от первого в том, что при формировании файла данные обрабатываются потоком, а не помещаются в память целиком.



Пример записи того же JSON:




Как видим, потоковая запись занимает больше времени и выглядит не так красиво, как объектная.

Пример потокового чтения:      




Как видно, здесь показана лишь возможность обработки чтения. На самом деле, чтобы прочитать файл примера выше, необходимо написать намного больше кода, желательно используя итерацию для чтения массивов. Также нужно добавить код создания и заполнения структуры и массива. Вот почему я чаще пользуюсь именно объектной обработкой формата JSON.


Способ 3. Объектный через СериализаторXDTO.
Особенность способа в том, что СериализаторXDTO способен сериализовать объекты 1С. Поэтому данный способ можно использовать для передачи данных между базами 1С.


Пример записи объекта 1С:





Результат будет такой:
{

"#type": "jcfg:CatalogObject.Организации",

"#value": {

"Ref": "624aad03-5f82-11e4-8258-201a060dcd61",

"DeletionMark": false,

"Code": "000000001",

"Description": "Основнаяорганизация",

"ИНН": "123456789",

"ЮридическийАдрес": "город, улица, до",

"Телефон": "123456789",

"ОсновнойСчет": "624aad04-5f82-11e4-8258-201a060dcd61"

}

}

Пример чтения:




Как видно, обработка сериализатором такая же простая в коде, как и объектный способ 1.  

 

4.    Особенности работы 1С JSON


Если в процессе записи объектным способом будет передан неподдерживаемый тип данных, то возможно передать это значение в экспортную функцию для дополнительной обработки, задав ИмяФункцииПреобразования (например, ссылку на справочник преобразовать в его наименование).


Выглядит это так:

ЗаписатьJSON(ЗаписьJSON, Структура,, "ПреобразованиеЗначенийJSON", ЭтаФорма);

Аналогично при чтении JSON можно задать ИмяФункцииВосстановаления.

По сути, это напоминает работу с асинхронными методами, где в ОписанииОповещения передается имя и модуль обработки завершения.

 

Дата из 1С относится к неподдерживаемым типам данных JSON. Но все же для нее есть особые методы. Они схожи с обработчиками описанными выше, но с небольшим исключением.


При записи дата из 1С, всегда преобразовывается в строку, а формат преобразования задается в параметре НастройкаСериализации. Я на практике использовал только преобразование ISO, хотя есть ещеJavaScript иMicrosoft.




А вот при чтении необходимо будет задать ИменаСвойствСоЗначениямиДата и ОжидаемыйФорматДаты, вот так:
ОбъектИзJSON = ПрочитатьJSON(ЧтениеJSON, , "Дата", ФорматДатыJSON.ISO);

 

Вот и все тонкости работы с 1С JSON. Освоить его – это уже половина пути к погружению во все сферы, где данный формат применяется!


Специалист компании ООО «Кодерлайн» 

Вадим Хоменко.

Наши проекты

ООО "РУКАРД-АУРА"
ООО "РУКАРД-АУРА"

Отрасль:
Профессиональные услуги

Внедренное типовое решение:
1С:Комплексная автоматизация

- Налоговый учет;...

ООО «ПраксисКом»
ООО «ПраксисКом»

Отрасль:
Аутсорсинг бухгалтерских услуг

Внедренное типовое решение:
1С:Управление небольшой фирмой 8 ПРОФ

- Взаиморасчеты с поставщиками
- Учет прихода ТМЦ
- Взаиморасчеты с поку...

ПЭК
ПЭК

Отрасль:
Грузоперевозки

Внедренное типовое решение:
«1С: Управление торговлей»

- Создание прототипа SRM-системы на базе «1С: Управление торговлей»
- Автомат...

ООО «Лаборатория успеха»
ООО «Лаборатория успеха»

Отрасль:
Общественное и плановое питание, гостиничный бизнес, туризм

Внедренное типовое решение:
1С:Зарплата и управление персоналом 8. КОРП

Кадровый учет;
Расчет зарплаты;...

Разработка функциональных требований к информсистеме на базе «1С:Управление холдингом 8»
ФГУП «СВЯЗЬ-безопасность»

Отрасль:
Охранные услуги

Внедренное типовое решение:
1С:Управление холдингом

- Зафиксировали процессы по блокам бухгалтерского, налогового учета, казнач...

ООО "ЛИКАРД" (Лукойл)
ООО "ЛИКАРД" (Лукойл)

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Делопроизводство
• Учет и контроль исполнения поручений
Учет и хранение...

ООО «Стейдж Энтертейнмент Россия»
ООО «Стейдж Энтертейнмент Россия»

Отрасль:
Театральная деятельность

Внедренное типовое решение:
Платформа 1С:Предприятие 8

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

Автоматизации бизнес-процессов учета и планирования на базе «1С:ERP Управление предприятием 2.0»
ООО «Буровая сервисная компания «ГРАНД»

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

- Создание полноценной управленческой системы взамен существующих
- Внедр...

ООО «Иви.ру»
ООО «Иви.ру»

Отрасль:
Медиаиндустрия

Внедренное типовое решение:
1С:Управление корпоративными финансами

Подсистема казначейства
Модуль бюджетного контроля по ДДС ...

Группа компаний ТМ «Дружба народов»
Группа компаний ТМ «Дружба народов»

Отрасль:
Пищевая промышленность

Внедренное типовое решение:
1С:ERP Управление предприятием 2.1

- Переход на новый релиз 2.1 программы «1С:ERP Управление предприятием»
- Разра...

ООО «ЛукБелОйл»
ООО «ЛукБелОйл»

Отрасль:
Нефтегазовая отрасль

Внедренное типовое решение:

- Обследовании бизнес-процессов «Документооборот», «Казначейство и Бюджети...

Внедрение ПП "1С:Бухгалтерия 8 ПРОФ" в ООО "ДЕКОР"
ООО «ДЕКОР»

Отрасль:
Производство

Внедренное типовое решение:
1С:Бухгалтерия 8 ПРОФ

Управление персоналом и кадровый учет (HRM):
- Кадровый учет
- Расчет зарпл...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение