Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Функции преобразования и восстановления
Дальше: Функция восстановления
Функция преобразования

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

Например, структура с информацией о контрагенте помимо примитивных типов данных содержит объект встроенного языка ДанныеАдреса. JSON ничего не знает о подобных типах, поэтому если попытаться записать данные в JSON обычным образом, без использования функции преобразования, то будет получена ошибка из-за недопустимых для сериализации типов данных. Поэтому в метод ЗаписатьJSON() мы передаем имя функции преобразования и указываем, что она находится в том же модуле формы (ЭтотОбъект), что и процедура сериализации данных (листинг 1.24).

Листинг 1.24. Пример сериализации в JSON-документ с использованием функции преобразования

&НаСервере

Процедура СериализацияСФункциейПреобразованияНаСервере()

 

// Создать структуру с данными контрагента.

Данные = Новый Структура;

Данные.Вставить("Контрагент", "ОАО Топаз");

Данные.Вставить("ОбъемПродаж", 5000000);

 

// Записать свойство Адрес, имеющее тип ДанныеАдреса.

ДопИнфо = Новый ДанныеАдреса(Новый Структура("Город, Страна, Индекс", "Москва", "Россия", "112233"));

Данные.Вставить("Адрес", ДопИнфо);

Данные.Вставить("Поставщик", Ложь);

 

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);

Запись.ОткрытьФайл("c:\temp\Serialisation_4.json",,, ПараметрыЗаписиJSON);

 

// Выполнить запись данных (Данные) с помощью объекта записи (Запись).

ЗаписатьJSON(Запись, Данные, , "ФункцияПреобразованияЗаписи", ЭтотОбъект);

 

// Завершить работу с файлом.

Запись.Закрыть();

 

КонецПроцедуры

Отличие от обычной записи данных в JSON-документ заключается в том, что для всех свойств, тип которых не поддерживает автоматическую сериализацию в JSON, вызывается функция преобразования ФункцияПреобразованияЗаписи().

В этой функции в параметрах Свойство и Значение содержатся соответственно имя и значение того поля структуры данных, которое не может быть автоматически сериализовано в JSON (листинг 1.25).

Листинг 1.25. Функция преобразования

&НаСервере

Функция ФункцияПреобразованияЗаписи(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт

 

Если Свойство = "Адрес" Тогда

Адрес = "Страна: " + Значение.Страна + ", Индекс: " + Значение.Индекс + ", Город: " + Значение.Город;

Возврат Адрес;

КонецЕсли;

Отказ = Истина;

 

КонецФункции

В функции преобразования мы извлекаем данные из объекта ДанныеАдреса в строку, и эта строка возвращается в метод ЗаписатьJSON().

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.26).

Листинг 1.26. Содержимое JSON-документа

{

"Контрагент": "ОАО Топаз",

"ОбъемПродаж": 5000000,

"Адрес": "Страна: Россия, Индекс: 112233, Город: Москва",

"Поставщик": false

}

Назад: Функции преобразования и восстановления
Дальше: Функция восстановления