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.Закрыть(); КонецПроцедуры
|