JSON – популярный текстовый формат обмена данными. В этой статье я дам пару примеров работы с JSON в программах 1С 8.3
Содержание
- Пример 1. Чтение JSON (Строка JSON >> Структура)
- Пример 2. Запись JSON (Структура >> Строка JSON)
- Пример 3. Чтение JSON с преобразованием типов (Строка >> Структура JSON)
- Пример 4. Запись JSON с преобразованием типов (Структура >> Строка JSON)
Пример 1. Чтение JSON (Строка JSON >> Структура)
// Функция - Простое чтение JSON // Функция преобразует строку JSON в структура 1С // Параметры: // Данные - Строка - Строка в формате JS // // Возвращаемое значение: // Структура - Результат преоборазования // Функция ПростоеЧтениеJSON(Данные) ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Данные); Возврат ПрочитатьJSON(ЧтениеJSON); КонецФункции
Пример 2. Запись JSON (Структура >> Строка JSON)
Процедура ТестЗаписиJSON() Данные = Новый Структура(); Данные.Вставить("date",ТекущаяДата()); Данные.Вставить("base","RUB"); Результат = ПростаяЗаписьJSON(Данные); КонецПроцедуры Функция ПростаяЗаписьJSON(Данные) ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,Данные); Возврат ЗаписьJSON.Закрыть(); КонецФункции
В результате получим такую строку:
{
"date": "2021-02-13T13:46:17",
"base": "RUB"
}
Пример 3. Чтение JSON с преобразованием типов (Строка >> Структура 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
}
}
Результат
Пример 4. Запись JSON с преобразованием типов (Структура >> Строка JSON)
Процедура ТестЗаписиJSON() Данные = Новый Структура(); Данные.Вставить("date",ТекущаяДата()); Данные.Вставить("base",Константы.ВалютаРегламентированногоУчета.Получить()); Результат = ЗаписьJSON(Данные); КонецПроцедуры Функция ЗаписьJSON(Данные) ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); НастройкиJSON = Новый НастройкиСериализацииJSON; НастройкиJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДата; НастройкиJSON.ФорматСериализацииДаты = ФорматДатыJSON.ISO; ЗаписатьJSON(ЗаписьJSON,Данные,НастройкиJSON,"ФункцияПреобразованияJSON", ЭтотОбъект); Возврат ЗаписьJSON.Закрыть(); КонецФункции Функция ФункцияПреобразованияJSON(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт Если ТипЗнч(Значение) = Тип("СправочникСсылка.Валюты") Тогда Возврат СокрЛП(Значение.Наименование); КонецЕсли; КонецФункции
Результат: