Работа с 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

Контакты:

Телефон: +7 963 570 26 00

E-mail: al_zzz@mail.ru

Дизайн сайта:

Веб-дизайн и верстка: Зелёнкина Елена

8 963 578 05 35, lena_431@mail.ru