Часто при разработке интеграционных механизмов, использующих формат JSON, разработчики сталкиваются с тем, что пути к файлам или строковые значения, содержащие символ обратной косой черты (\), после записи в файл или вывода в строку выглядят иначе. Вместо привычного пути \folder\file мы видим \\folder\\file. Давайте разберемся, является ли это ошибкой платформы и нужно ли как-то «исправлять» такое поведение.
Прежде всего, важно уяснить: задваивание слэшей — это не ошибка платформы 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, часто удивляются поведению JSON, так как в XML строковые значения чаще воспринимаются как «текст как есть». Это различие обусловлено архитектурой форматов:
XML используются свои механизмы экранирования (например, для символов & или <), и они не затрагивают обратную косую черту так агрессивно, как JSON.JSON — это формат, изначально ориентированный на передачу данных в языки программирования семейства C-подобных, где обратная косая черта — это классический символ экранирования.Работая с ЗаписьJSON, мы должны доверять стандартизированному поведению платформы:
ЧтениеJSON или ПрочитатьJSON для получения данных обратно — они автоматически преобразуют экранированные символы в нормальный вид.СтрЗаменить перед записью, так как это сделает ваш JSON-файл нечитаемым для большинства современных веб-сервисов и API.Следование этим простым правилам позволит вам избежать ошибок при интеграции систем и обеспечит стабильную работу обмена данными.