Почему при записи JSON в 1С задваиваются слэши и как с этим работать?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто при разработке интеграционных механизмов, использующих формат JSON, разработчики сталкиваются с тем, что пути к файлам или строковые значения, содержащие символ обратной косой черты (\), после записи в файл или вывода в строку выглядят иначе. Вместо привычного пути \folder\file мы видим \\folder\\file. Давайте разберемся, является ли это ошибкой платформы и нужно ли как-то «исправлять» такое поведение.

Понимаем природу экранирования в JSON

Прежде всего, важно уяснить: задваивание слэшей — это не ошибка платформы 1С:Предприятие. Это строгое требование международного стандарта формата JSON (RFC 8259). Символ обратной косой черты в этом стандарте является служебным (управляющим) символом.

Когда вы записываете путь, содержащий \, ЗаписьJSON автоматически превращает его в \\. Это делается для того, чтобы парсеры других систем (например, на JavaScript, Python или PHP) не приняли следующий за слэшем символ за управляющую последовательность (например, \n — перенос строки, \t — табуляция и так далее). Экранируя слэш вторым слэшем, 1С гарантирует, что данные будут прочитаны именно как путь, а не как служебная команда.

Нужно ли избегать экранирования?

Короткий ответ: нет, этого не нужно избегать. Наоборот, попытки принудительно «исправить» это поведение приведут к тому, что ваш JSON-файл перестанет соответствовать стандарту. В результате внешние системы просто не смогут его распарсить.

Рассмотрим стандартный процесс записи данных через объекты платформы:


ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл("C:\Temp\result.json");
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("path");
ЗаписьJSON.ЗаписатьЗначение("\my-group.local\Holding\Файловый пул");
ЗаписьJSON.ЗаписатьКонецОбъекта();
ЗаписьJSON.Закрыть();

После выполнения этого кода в файле вы увидите двойные слэши. Однако при использовании штатного метода чтения эти данные автоматически вернутся в исходный вид.

Как правильно считывать такие данные

Чтобы убедиться, что данные передаются корректно, давайте посмотрим, как работает объект ЧтениеJSON. Платформа берет на себя всю рутинную работу по декодированию:


ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл("C:\Temp\result.json");
Данные = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

// Переменная Данные.path будет содержать значение "\my-group.local\Holding\Файловый пул"
// без лишних слэшей

Как мы видим, платформа 1С самостоятельно выполняет обратную операцию. При десериализации (чтении) двойной слэш \\ автоматически превращается в один \. Таким образом, на уровне бизнес-логики вашей программы вы всегда работаете с корректными строками.

Почему это работает иначе, чем в XML?

Разработчики, привыкшие работать с XML, часто удивляются поведению JSON, так как в XML строковые значения чаще воспринимаются как «текст как есть». Это различие обусловлено архитектурой форматов:

  1. В XML используются свои механизмы экранирования (например, для символов & или <), и они не затрагивают обратную косую черту так агрессивно, как JSON.
  2. JSON — это формат, изначально ориентированный на передачу данных в языки программирования семейства C-подобных, где обратная косая черта — это классический символ экранирования.

Подведем итоги

Работая с ЗаписьJSON, мы должны доверять стандартизированному поведению платформы:

Следование этим простым правилам позволит вам избежать ошибок при интеграции систем и обеспечит стабильную работу обмена данными.

← На главную