15.11.2019 Вадим Хоменко 49907
Варианты работы с форматом данных 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С:Управление нашей фирмой 8 ПРОФ

Взаиморасчеты с покупателями
Автоматизация бизнес-процессов...

1с-РАРУС МСК
1с-РАРУС МСК

Отрасль:
Разработка компьютерного программного обеспечения

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

- Финансово-бухгалтерский блок
- Казначейство ...

СТС-Медиа
СТС-Медиа

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

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

- Бухгалтерский учет;
- Налоговый учет;
- МСФО (GAAP/управленческий учет);
- ...

Автоматизация производственного планирования нефтесервисной компании на базе 1С:ЕРП 2.0
ЗАО «Инвестгеосервис»

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

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

- Блок планирования проектов (процессы объемно-календарного планирования пр...

ООО "ОМЗ"
ООО "ОМЗ"

Отрасль:
Металлургическая промышленность, металлообработка

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

Автоматизация бизнес-процессов...

ООО "Смена"
ООО "Смена"

Отрасль:
Торговля, склад, логистика, транспорт

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

Банк и касса
Расчеты с контрагентами
Торговые операции
Взаиморасчеты с...

Автоматизация системы учета продаж газа на базе «1С:ERP Управление предприятием 2.0»
ООО «Эйр Продактс Газ»

Отрасль:
Производство промышленных газов

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

- Расчеты с контрагентами;
- Производственные операции;
- Управление скла...

ФГОУ ВПО «Горский государственный аграрный университет»
ФГОУ ВПО «Горский государственный аграрный университет»

Отрасль:
Образование

Внедренное типовое решение:
1С:Колледж ПРОФ

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

ОАО «Интер РАО – Электрогенерация»
ОАО «Интер РАО – Электрогенерация»

Отрасль:
Электрогенерация

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

Для работы 2500 пользователей в 9 часовых поясах организована территориально-...

Группа компаний АО «Киномакс»
Группа компаний АО «Киномакс»

Отрасль:
Культура, шоу-бизнес

Внедренное типовое решение:
БИТ.Финанс

- Разработка Положения о Казначействе группы компаний
- Разработка Положе...

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Бухгалтерский учет
- Расчет зарплаты и кадровый учет
- Налоговый учет ...

Внедрение ПП "1С:CRM ПРОФ" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

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

Внедренное типовое решение:
1С:CRM ПРОФ

- Управление отношениями с клиентами (CRM) ...

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

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

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

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