1С 8.3 и JSON — Примеры использования

JSON – популярный текстовый формат обмена данными. В этой статье я дам пару примеров работы с JSON в программах 1С 8.3

Пример 1. Чтение JSON (Строка >> Структура)

// Функция - Простое чтение JSON
// Функция преобразует строку JSON  в структура 1С
// Параметры:
//  Данные	 - 	Строка - Строка в формате JS
// 
// Возвращаемое значение:
//  Структура - Результат преоборазования
//
Функция ПростоеЧтениеJSON(Данные)
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(Данные);  		
	Возврат ПрочитатьJSON(ЧтениеJSON);
	
КонецФункции

Пример 2. Запись JSON (Структура >> Строка)

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

	Данные = Новый Структура();
	Данные.Вставить("date",ТекущаяДата());
	Данные.Вставить("base","RUB"); 
	Результат = ПростаяЗаписьJSON(Данные);	

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


Функция ПростаяЗаписьJSON(Данные)
	
	ЗаписьJSON = Новый ЗаписьJSON;			
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON,Данные);			
	Возврат ЗаписьJSON.Закрыть();  
	
КонецФункции

В результате получим такую строку:

{
"date": "2021-02-13T13:46:17",
"base": "RUB"
}

Пример 3. Чтение JSON с преобразованием типов (Строка >> Структура)

Использование функций преобразования позволяет преобразовывать значения получаемых данных, например, подставить ссылку на валюту или заполнить дату
Запросим курсы валют со страницы https://www.cbr-xml-daily.ru/latest.js

Процедура ЗапроситьКурсыВалют()
	
	HTTPСоединение = Новый HTTPСоединение("www.cbr-xml-daily.ru");
	HTTPЗапрос = Новый HTTPЗапрос("latest.js"); 
	HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");	
	
	//GET Запрос
	Запрос = HTTPСоединение.Получить(HTTPЗапрос);
	Результат = ЧтениеJSON(Запрос.ПолучитьТелоКакСтроку());

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

Функция ЧтениеJSON(Данные)
	
	ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Данные);  		
	Возврат ПрочитатьJSON(ЧтениеJSON,,,,"ФункцияВосстановленияJSON", ЭтотОбъект);
	
КонецФункции


Функция ФункцияВосстановленияJSON(Свойство, Значение, ДополнительныеПараметры) Экспорт
	
	Если СтрНайти(Свойство,"date") > 0  Тогда // В название свойства есть Дата
		Возврат ПрочитатьДатуJSON(Значение, ФорматДатыJSON.ISO);
	ИначеЕсли Свойство = "base" Тогда
		Возврат Справочники.Валюты.НайтиПоНаименованию(Значение);	
	КонецЕсли;      
	
КонецФункции   

Исходные данные с сайта

{
    "date": "2021-02-13",
    "timestamp": 1613174400,
    "base": "RUB",
    "rates": {
        "AUD": 0.017483,
        ....
        "USD": 0.013525,
        "EUR": 0.01116
    }
}

Результат

1С 8.3 и JSON - Примеры использования

Пример 4. Запись JSON с преобразованием типов (Структура >> Строка)

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

	Данные = Новый Структура();
	Данные.Вставить("date",ТекущаяДата());
	Данные.Вставить("base",Константы.ВалютаРегламентированногоУчета.Получить()); 
	Результат = ЗаписьJSON(Данные);	

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

Функция ЗаписьJSON(Данные)
	
	ЗаписьJSON = Новый ЗаписьJSON;			
	ЗаписьJSON.УстановитьСтроку();
	НастройкиJSON = Новый НастройкиСериализацииJSON;
	НастройкиJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДата;
	НастройкиJSON.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
	ЗаписатьJSON(ЗаписьJSON,Данные,НастройкиJSON,"ФункцияПреобразованияJSON", ЭтотОбъект);			
	Возврат ЗаписьJSON.Закрыть();  
	
КонецФункции

Функция ФункцияПреобразованияJSON(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт
	
	Если ТипЗнч(Значение) = Тип("СправочникСсылка.Валюты")  Тогда		
		Возврат СокрЛП(Значение.Наименование);	
	КонецЕсли; 
	
КонецФункции

Результат:

1С 8.3 и JSON - Примеры использования
Подпи