1CLenta.ru  

Сериализация и десериализация JSON

Программирование системы     04.02.2017 14:34     56290

JSON (JavaScript Object Notation) - это универсальный текстовый формат представления данных, который используется для обмена данными между приложениями. Для работы с данным форматом во многих популярных языках программирования доступны специальные объекты, функции. Если преобразовать объект в данный формат, то текст будет понятным для чтения человеком. Данный текст можно просмотреть в любом текстовом редакторе.

Сериализация JSON может быть использована вместо функций "ЗначениеВСтрокуВнутр()" и "ЗначениеИзСтрокиВнутр()".

Преимуществом данного формата является лаконичность представления данных. Данные представленные в JSON, в отличии от XML, занимают меньший объем. Сериализация и десериализация выполняется быстрее чем с XML.

Вариант 1


Начиная с версии 1С:Предприятие 8.3.7.1759, объект СериализаторXDTO поддерживает сериализацию и десериализацию JSON. Это означает, что любой объект 1С:Предприятия (объект конфигурации или объект встроенного языка) можно автоматически сериализовать и десериализовать.

Процедура ЗаписьJSON()

ЗаписьJSON = Новый ЗаписьJSON;
//Или в строку
ЗаписьJSON.УстановитьСтроку();
//Или в файл
ЗаписьJSON.ОткрытьФайл("C:\test.txt");

Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000000001").ПолучитьОбъект();
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Номенклатура, НазначениеТипаXML.Явное);

СериализованнаяСтрока = ЗаписьJSON.Закрыть();

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


Процедура ЧтениеJSON()

ЧтениеJSON = Новый ЧтениеJSON;
//Или из строки
ЧтениеJSON.УстановитьСтроку("");
//Или из файла
ЧтениеJSON.ОткрытьФайл("C:\test.txt");

Номенклатура = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON);

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

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


Вариант 2


ЗаписатьJSON() - это метод глобального контекста, который позволяет сериализовать значения следующих типов: Строка, Число, Булево, Дата, Массив, ФиксированныйМассив, Структура, ФиксированнаяСтруктура, Соответствие, ФиксированноеСоответствие. С помощью метода глобального контекста ПрочитатьJSON(), можно десериализовать значения этих же типов.

Процедура ЗаписьJSON()

ЗаписьJSON = Новый ЗаписьJSON;
//Или в строку
ЗаписьJSON.УстановитьСтроку();
//Или в файл
ЗаписьJSON.ОткрытьФайл("C:\test.txt");

//Запись структуры
Структура = Новый Структура;
Структура.Вставить("Поле1", "Значение1");
Структура.Вставить("Поле2", "Значение2");
Структура.Вставить("Поле3", "Значение3");
ЗаписатьJSON(ЗаписьJSON, Структура);

СериализованнаяСтрока = ЗаписьJSON.Закрыть();

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


Процедура ЧтениеJSON()

ЧтениеJSON = Новый ЧтениеJSON;
//Или из строки
ЧтениеJSON.УстановитьСтроку("");
//Или из файла
ЧтениеJSON.ОткрытьФайл("C:\test.txt");

Структура = ПрочитатьJSON(ЧтениеJSON);

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

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


Вариант 3


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

Процедура ЗаписьJSON()

ЗаписьJSON = Новый ЗаписьJSON;
//Или в строку
ЗаписьJSON.УстановитьСтроку();
//Или в файл
ЗаписьJSON.ОткрытьФайл("C:\test.txt");

ЗаписьJSON.ЗаписатьНачалоМассива();

ЗаписьJSON.ЗаписатьЗначение("Значение1");
ЗаписьJSON.ЗаписатьЗначение("Значение2");
ЗаписьJSON.ЗаписатьЗначение("Значение3");

ЗаписьJSON.ЗаписатьНачалоОбъекта();

ЗаписьJSON.ЗаписатьИмяСвойства("Свойство1");
ЗаписьJSON.ЗаписатьЗначение("Значение1");
ЗаписьJSON.ЗаписатьИмяСвойства("Свойство2");
ЗаписьJSON.ЗаписатьЗначение("Значение2");

ЗаписьJSON.ЗаписатьКонецОбъекта();

ЗаписьJSON.ЗаписатьКонецМассива();

СериализованнаяСтрока = ЗаписьJSON.Закрыть();

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


Процедура ЧтениеJSON()

ЧтениеJSON = Новый ЧтениеJSON;
//Или из строки
ЧтениеJSON.УстановитьСтроку("");
//Или из файла
ЧтениеJSON.ОткрытьФайл("C:\test.txt");

Пока ЧтениеJSON.Прочитать() Цикл

Если ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоМассива Тогда

Пока ЧтениеJSON.Прочитать() Цикл

Если ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Тогда
Сообщить("Значение: " + ЧтениеJSON.ТекущееЗначение);

ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоОбъекта Тогда

Пока ЧтениеJSON.Прочитать() Цикл

Если ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда
Сообщить("Свойство: " + ЧтениеJSON.ТекущееЗначение);

ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Тогда
Сообщить("Значение: " + ЧтениеJSON.ТекущееЗначение);

КонецЕсли;

КонецЦикла;

КонецЕсли;

КонецЦикла;

КонецЕсли;

КонецЦикла;

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

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

Комментарии (0)