Работа с Json в 1С

  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