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

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

При использовании функции восстановления разработчик должен знать, какие данные и в каком виде находятся JSON-документе.

Например, требуется прочитать из JSON-документа, показанного в листинге 1.27, информацию о контрагенте и при этом представить телефоны контрагента в привычном формате: «999-99-99».

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

{

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

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

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

"+71112223344",

"+79998887766"

],

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

}

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

Листинг 1.28. Пример десериализации данных из JSON-документа с функцией восстановления

&НаСервере

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

 

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

Чтение = Новый ЧтениеJSON;

Чтение.ОткрытьФайл("c:\temp\Serialisation_6.json");

 

// Выполнить чтение данных в структуру Данные с помощью объекта чтения (Чтение).

Данные = ПрочитатьJSON(Чтение, Ложь, , , "ФункцияВосстановленияЧтения", ЭтотОбъект);

 

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

Чтение.Закрыть();

 

 

// Вывести результат чтения в сообщение.

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Контрагент: " + Данные.Контрагент + ", Объем продаж: " + Данные.ОбъемПродаж +

", Поставщик: "+ Данные.Поставщик + ", Телефоны: ";

Для Каждого Телефон Из Данные.Телефоны Цикл

Сообщение.Текст = Сообщение.Текст + Телефон + ", ";

КонецЦикла;

Сообщение.Сообщить();

 

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

Отличие от обычного чтения из JSON-документа заключается в том, что при чтении вызывается функция восстановления ФункцияВосстановленияЧтения(). Преобразованные с помощью функции восстановления данные сохраняются в структуру Данные. После этого структура данных выводится в сообщение пользователю.

В функции восстановления мы обходим массив телефонов и представляем каждый телефон в привычном виде. Результат восстановления возвращается в метод ПрочитатьJSON() (листинг 1.29).

Листинг 1.29. Функция восстановления

&НаСервере

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

 

Если Свойство = "Телефоны" И ТипЗнч(Значение) = Тип("Массив") Тогда

Телефоны = Новый Массив;

Для Каждого Телефон Из Значение Цикл

СтрокаТелефона = Лев(Телефон,2) + "-" + Сред(Телефон, 3, 3) + "-" + Сред(Телефон, 6, 3) + "-" +

"-" + Сред(Телефон, 9, 2) + "-" + Прав(Телефон,2);

Телефоны.Добавить(СтрокаТелефона);

КонецЦикла;

Возврат Телефоны;

КонецЕсли;

 

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

Результат чтения JSON-документа, содержимое которого показано в листинге 1.27, будет выглядеть следующим образом (рис. 1.5).

Рис. 1.5. Чтение из JSON-документа с функцией восстановления

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

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

Листинг 1.30. Пример десериализации данных из JSON-документа с функцией восстановления

&НаСервере

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

 

// Заполнить массив имен реквизитов для восстановления.

РеквизитыДляВосстановления = Новый Массив;

РеквизитыДляВосстановления.Добавить("Телефоны");

 

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

Чтение = Новый ЧтениеJSON;

Чтение.ОткрытьФайл("c:\temp\Serialisation_6.json");

 

// Выполнить чтение данных в структуру Данные с помощью объекта чтения (Чтение).

Данные = ПрочитатьJSON(Чтение, Ложь, , , "ФункцияВосстановленияЧтения", ЭтотОбъект, , РеквизитыДляВосстановления);

 

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

Чтение.Закрыть();

 

// Вывести результат чтения в сообщение.

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Контрагент: " + Данные.Контрагент + ", Объем продаж: " + Данные.ОбъемПродаж +

", Поставщик: "+ Данные.Поставщик + ", Телефоны: ";

Для Каждого Телефон Из Данные.Телефоны Цикл

Сообщение.Текст = Сообщение.Текст + Телефон + ", ";

КонецЦикла;

Сообщение.Сообщить();

 

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

В результате чтение данных из JSON-документа будет выполнено быстрее, так как функция восстановления будет вызвана только для свойств, имена которых перечислены в массиве РеквизитыДляВосстановления.

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