JSON в интеграции 1С
JSON (JavaScript Object Notation) — текстовый формат обмена данными. На платформе 8.3 он используется при вызове внешних REST API, в телах HTTP-сервисов, в конфигурационных файлах обмена и при интеграции с маркетплейсами, банками, сайтами.
Платформа даёт три уровня работы с JSON — от низкоуровневого потока до сериализации ссылок и документов. Выбор уровня зависит от объёма данных, типов в документе и требований контрагента.
| Уровень | Объекты | Когда применять |
|---|---|---|
| Потоковый | ЗаписьJSON, ЧтениеJSON | Большие файлы, ручной контроль структуры, ответ HTTP-сервиса "по кускам" |
| Объектный (коллекции) | ЗаписатьJSON(), ПрочитатьJSON() | Структура, Массив, Соответствие — типичный REST-обмен |
| Прикладные типы | СериализаторXDTO.ЗаписатьJSON() | Ссылки, объекты, наборы записей — обмен между базами 1С или строгий контракт |
См. также Коллекции значений — типы, которые попадают в JSON на втором уровне.
Потоковая запись и чтение
Объекты ЗаписьJSON и ЧтениеJSON обходят документ поэлементно, без загрузки всего файла в память. Удобно для выгрузки больших выборок и формирования ответа HTTP-сервиса.
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("Наименование");
Запись.ЗаписатьЗначение("Товар А");
Запись.ЗаписатьКонецОбъекта();
СтрокаJSON = Запись.Закрыть();
Чтение — симметрично: ЧтениеJSON.УстановитьСтроку() или ОткрытьФайл(), затем цикл по Прочитать() с разбором типа текущего значения (ИмяСвойства, НачалоОбъекта, КонецОбъекта и т.д.).
По умолчанию ЗаписьJSON проверяет корректность вложенности. Для нестандартных схем можно отключить: Запись.ПроверятьСтруктуру = Ложь.
Объектная техника — коллекции
Методы глобального контекста ЗаписатьJSON() и ПрочитатьJSON() сериализуют примитивы и коллекции платформы целиком в память.
Запись:
Данные = Новый Структура;
Данные.Вставить("Контрагент", "ООО Пример");
Данные.Вставить("Сумма", 150000);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
СтрокаJSON = Запись.Закрыть();
Чтение возвращает Структура, Массив, Соответствие, числа, строки, булево, Неопределено, Дата.
Структура или соответствие
По умолчанию ключи читаются в структуру. Имена свойств с точками, пробелами или спецсимволами ("user.first", "Объем Продаж") в структуру не помещаются — нужно читать в соответствие:
Данные = ПрочитатьJSON(Чтение, Истина); // второй параметр — в соответствие
Функции преобразования
Если внешний API отдаёт телефоны в неудобном виде или даты в нестандартном формате, в ЗаписатьJSON / ПрочитатьJSON передают функцию преобразования и контекст (ЭтотОбъект). Для ускорения чтения больших файлов можно ограничить список свойств, для которых вызывается восстановление.
Даты
JSON не задаёт единый формат даты. Платформа поддерживает ФорматДатыJSON: ISO, JavaScript и др. При записи — через НастройкиСериализацииJSON; при чтении — параметры ИменаСвойствСоЗначениямиДата и формат.
Прикладные типы через XDTO
Коллекции не сериализуют ссылки на справочники и объекты документов. Для прикладных типов используют СериализаторXDTO:
Сериализатор = Новый СериализаторXDTO;
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Сериализатор.ЗаписатьJSON(Запись, ОбъектДокумента);
СтрокаJSON = Запись.Закрыть();
Чтение — СериализаторXDTO.ПрочитатьJSON(Чтение, Тип("СправочникОбъект.Номенклатура")). Подробнее про XML и XDTO-пакеты — в материалах фазы 3 (хаб интеграции).
Смешанная техника
На практике комбинируют уровни:
- HTTP-сервис отдаёт список через потоковую запись в цикле по выборке (экономия памяти);
- входящее тело POST разбирают
ПрочитатьJSONв структуру; - выгрузка пакета для другой базы 1С — XDTO в файл.
Связанные материалы
- HTTP-сервисы 1С — JSON в теле ответа сервиса
- HTTP-запросы из 1С — разбор JSON из
HTTPОтвет - Интеграция — хаб
- Общий разбор REST и форматов — API