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.Закрыть();
КонецПроцедуры
Материал взят с сайта 1clenta.ru