В 1С:Предприятии 8.3 JSON читают объектом ЧтениеJSON и функцией ПрочитатьJSON, а пишут объектом ЗаписьJSON и функцией ЗаписатьJSON. Объекты JSON превращаются в Структуру или Соответствие, массивы — в Массив; даты остаются строками, пока вы явно не попросите их разобрать.
Чтение JSON в 1С
ЧтениеJSON открывает источник — файл методом ОткрытьФайл или строку методом УстановитьСтроку, — а ПрочитатьJSON разбирает его целиком и возвращает значение 1С. Второй параметр ПрочитатьJSON решает, во что превращать объекты: Ложь (по умолчанию) — в Структуру, Истина — в Соответствие.
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл(ИмяФайла, КодировкаТекста.UTF8);
Данные = ПрочитатьJSON(Чтение, Истина); // объекты станут Соответствием
Чтение.Закрыть();
Для Каждого Товар Из Данные["items"] Цикл
Сообщить(Товар["sku"] + ": " + Товар["qty"]);
КонецЦикла;Читайте в Соответствие, если ключи приходят из чужой системы. Структура требует, чтобы ключ был допустимым именем переменной 1С, поэтому ключи с дефисом, пробелом или из одних цифр — "order-id", "2026" — при чтении в структуру вызовут ошибку. Кроме того, ключи структуры не различают регистр: "Id" и "id" в ней совпадут. В Соответствии любые ключи остаются как есть, а обращение — по точному имени: Данные["order-id"].
Ответ HTTP-сервиса читается так же, только через УстановитьСтроку. Перед разбором проверьте код ответа: если сервер вернул ошибку, в теле будет HTML-страница, а не JSON.
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния <> 200 Тогда
ВызватьИсключение "Сервер вернул код " + Ответ.КодСостояния;
КонецЕсли;
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
Данные = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();Запись JSON в 1С
ЗаписатьJSON сериализует Структуру, Соответствие, Массив, строки, числа, булевы значения, даты и Неопределено (оно станет null). Писать можно в файл методом ОткрытьФайл или в строку методом УстановитьСтроку; во втором случае готовый текст возвращает метод Закрыть().
Заказ = Новый Структура;
Заказ.Вставить("id", 1057);
Заказ.Вставить("status", "paid");
Заказ.Вставить("comment", Неопределено);
Параметры = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(Параметры);
ЗаписатьJSON(Запись, Заказ);
Текст = Запись.Закрыть(); // весь JSON в одну строку, comment станет nullСсылки, объекты справочников и документов, ТаблицуЗначений ЗаписатьJSON напрямую не запишет. Соберите из них Массив структур с нужными полями — так вы заодно сами решите, какие поля и под какими именами получит принимающая сторона.
ПараметрыЗаписиJSON: переносы, отступы, экранирование
Внешний вид результата задаёт объект ПараметрыЗаписиJSON, который передают в УстановитьСтроку или ОткрытьФайл. Параметры конструктора по порядку:
ПереносСтрок— значениеПереносСтрокJSON:Авто(по умолчанию),Unix,WindowsилиНет— всё в одну строку.СимволыОтступа— чем делать отступ, например два пробела илиСимволы.Таб.ИспользоватьДвойныеКавычки— по умолчаниюИстина; стандарт JSON разрешает только двойные, не меняйте.ЭкранированиеСимволов— значениеЭкранированиеСимволовJSON:Нет(по умолчанию),СимволыВнеASCII— кириллица запишется кодами\u0417,СимволыВнеBMP— кодами только символы за пределами базовой плоскости, например эмодзи.ЭкранироватьУгловыеСкобки,ЭкранироватьРазделителиСтрок,ЭкранироватьАмперсанд,ЭкранироватьОдинарныеКавычки,ЭкранироватьСлеш— точечные настройки, нужны редко.
Кавычки, обратную косую черту и переносы строк внутри значений ЗаписьJSON экранирует сама — вручную заменять " на \" не нужно. Если вы видите в результате \" там, где их быть не должно, JSON записали дважды: сначала в строку, а потом эту строку ещё раз как значение. Такую строку разворачивает обратно инструмент «Строка».
Если JSON нужно вставить прямо в код модуля, помните о правилах самого встроенного языка: кавычка внутри строкового литерала удваивается — Текст = "{""id"": 1057}";.
Даты в JSON и 1С
В JSON нет типа «дата», поэтому ПрочитатьJSON по умолчанию оставляет даты строками. Чтобы получить Дату, перечислите такие свойства в третьем параметре ИменаСвойствСоЗначениямиДата и укажите формат в четвёртом — значение ФорматДатыJSON: ISO ("2026-11-04T10:30:00"), JavaScript или Microsoft ("/Date(1793777400000)/").
Данные = ПрочитатьJSON(Чтение, Истина, "created_at", ФорматДатыJSON.ISO);Если значение в перечисленных свойствах не похоже на дату — например, пустая строка или другой формат, — ПрочитатьJSON может выбросить исключение, и из его текста не всегда понятно, что дело в дате. Чтобы проверить, уберите третий параметр: если без него всё читается, ищите неподходящее значение даты. Надёжнее читать даты строками и преобразовывать отдельно функцией ПрочитатьДатуJSON.
При записи формат дат задают объектом НастройкиСериализацииJSON: свойство ФорматСериализацииДаты и ВариантЗаписиДаты — ЛокальнаяДата, УниверсальнаяДата или ЛокальнаяДатаСоСмещением, если принимающей стороне нужен часовой пояс. Настройки передают третьим параметром ЗаписатьJSON.
JSON в таблицу значений
Готовой функции «JSON в таблицу значений» в платформе нет: прочитайте JSON в Массив соответствий и заполните таблицу в цикле. Колонки задавайте сами — так вы не зависите от порядка и набора полей в ответе.
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Артикул");
Таблица.Колонки.Добавить("Количество");
Для Каждого Товар Из Данные["items"] Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Артикул = Товар["sku"];
НоваяСтрока.Количество = Товар["qty"];
КонецЦикла;{
"order_id": "00-00001057",
"items": [
{ "sku": "00-00012345", "name": "Кабель ВВГнг 3х2,5", "qty": 50, "price": 87.5 },
{ "sku": "00-00012346", "name": "Автомат 16А", "qty": 4, "price": 410 }
]
}Чтобы заранее увидеть структуру незнакомого ответа и пути к полям, откройте его в «Дереве»: при клике по узлу оно покажет путь вида items[0].sku. Если нужно отдать данные человеку, а не программе, инструмент «Excel и CSV» превратит такой массив в таблицу без кода.
«Непредвиденный символ при чтении JSON»
Полный текст обычно такой: «Ошибка при вызове метода контекста (ПрочитатьJSON): Непредвиденный символ при чтении JSON». Он значит, что в тексте встретился символ, которого по правилам JSON там быть не может. Частые причины:
- Вместо JSON пришла HTML-страница: ошибка сервера, перенаправление (301, 302), страница авторизации. Проверьте
КодСостоянияи начало тела ответа — если оно начинается с<, это не JSON. - Сервис ответил в другом формате. Добавьте в запрос заголовок
Accept: application/json. - BOM в начале текста. Если тело прочитано в строку вместе с BOM, первым символом окажется невидимый U+FEFF, а при неверно указанной кодировке — «п»ї».
- JSON написан руками или собран конкатенацией строк: висячая запятая, одинарные кавычки, комментарий, неэкранированная кавычка внутри значения.
- Пустой или оборванный ответ: соединение закрылось на середине, или тело не дочитали.
Сохраните полученный текст в файл или выведите его в отладчике и вставьте в «Проверку»: она покажет все ошибки со строкой и колонкой и объяснит их по-русски. Предупредит и о BOM. Если ошибки похожи на исправимые — запятые, кавычки, комментарии, — «Починка» исправит их и покажет список изменений.
{
"Номенклатура": "Кабель ВВГнг 3х2,5",
'Артикул': "00-00012345",
"Цена": 87,5,
"Остаток": 120,
}Кириллица как \uXXXX и BOM
Многие сервисы отдают русские буквы кодами: "\u0417\u0430\u043a\u0430\u0437" вместо «Заказ». Это корректный JSON, и ПрочитатьJSON сам превратит коды в буквы — ничего делать не нужно. Чтобы прочитать такой ответ глазами при отладке, раскодируйте его в инструменте «Кириллица»; он же сделает обратное, если принимающая сторона требует только ASCII. В 1С для этого есть ЭкранированиеСимволовJSON.СимволыВнеASCII.
Если в данных не коды, а «Р—Р°РєР°Р·», текст в UTF-8 прочитали как Windows-1251: явно укажите КодировкаТекста.UTF8 в ОткрытьФайл или ПолучитьТелоКакСтроку. Уже испорченные строки вернёт та же «Кириллица».
BOM — три байта в начале файла в UTF-8. Стандарт JSON запрещает добавлять его при передаче по сети, и некоторые получатели, особенно на PHP и Python, на нём падают. Если ваш файл не принимают, проверьте его в «Проверке»: она предупредит о BOM. Наш сайт при открытии файла убирает BOM сам.
Частые вопросы
Как прочитать JSON в 1С
Создайте ЧтениеJSON, откройте файл методом ОткрытьФайл или строку методом УстановитьСтроку и вызовите ПрочитатьJSON(Чтение, Истина). Получите Соответствие или Массив, по которому можно идти циклом.
Чем ПрочитатьJSON в Структуру отличается от Соответствия
В Структуру попадают только ключи, допустимые как имена переменных 1С, и регистр в них не различается. Соответствие принимает любые ключи. Для данных из чужих API надёжнее Соответствие — второй параметр Истина.
Как записать JSON в строку в 1С
Создайте ЗаписьJSON, вызовите УстановитьСтроку, затем ЗаписатьJSON(Запись, Значение). Текст вернёт метод Закрыть(). Чтобы получить одну строку без переносов, передайте Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет).
Как отключить экранирование кириллицы в JSON 1С
По умолчанию 1С кириллицу не экранирует: ЭкранированиеСимволов равно Нет. Если в результате всё же коды \uXXXX, проверьте, не передан ли в ПараметрыЗаписиJSON режим СимволыВнеASCII.
Что значит «Непредвиденный символ при чтении JSON»
В тексте символ, недопустимый по правилам JSON. Чаще всего вместо JSON пришла HTML-страница с ошибкой, в начале стоит BOM или JSON собран вручную с лишней запятой. Вставьте текст в «Проверку» — она покажет место.
Как преобразовать JSON в таблицу значений
Прочитайте JSON в массив соответствий, создайте ТаблицаЗначений с нужными колонками и заполните её в цикле Для Каждого. Готовой функции для этого в платформе нет.
Инструменты по теме
- Проверка Найдёт все ошибки сразу и объяснит по-русски, как их исправить
- Кириллица Превратит \uXXXX в буквы и починит кракозябры
- Строка Экранирует JSON в строку и развернёт строку обратно в JSON
- Починка Исправит запятые, кавычки, комментарии и обрезанный конец
Ещё в справке
- Ошибки в JSON и как их исправить Висячая запятая, кавычки, комментарии, BOM и ещё десяток причин, почему JSON не разбирается. (откроется в новой вкладке)
- Unexpected token в JSON: причины и решение Unexpected token < в позиции 0 чаще всего значит, что сервер вернул HTML вместо JSON. (откроется в новой вкладке)
- Что такое JSON: формат, синтаксис и примеры Формат простыми словами: типы значений, правила, примеры и где он встречается. (откроется в новой вкладке)