Содержание
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. Освоить его – это уже половина пути к погружению во все сферы, где данный формат применяется!
Специалист компании ООО «Кодерлайн»
Вадим Хоменко.