Как преобразовать JSON-строку с Unicode escape-последовательностями в читаемый вид в 1С?

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

При получении данных от внешних API или веб-сервисов в формате JSON мы часто сталкиваемся с тем, что кириллические символы передаются не в открытом виде, а в формате Unicode escape sequence, например, \u0422\u0430\u0442\u044c\u044f\u043d\u0430. Обычная функция РаскодироватьСтроку, предназначенная для работы с URL-кодированием, в данной ситуации не помогает. Давайте разберемся, как правильно обработать такие данные средствами платформы 1С.

Почему не работает РаскодироватьСтроку?

Функция РаскодироватьСтроку ожидает на входе строку, закодированную методом URL, где спецсимволы заменяются на %XX. Однако последовательности вида \uXXXX — это стандарт кодирования JSON для представления символов Unicode. Для работы с ними необходимо использовать инструменты десериализации JSON, встроенные в платформу 1С:Предприятие 8.3.

Решение через объекты ЧтениеJSON и ЗаписьJSON

Наиболее эффективным, надежным и современным способом является использование встроенных объектов платформы. Этот метод не требует написания сложных регулярных выражений или использования внешних COM-компонент, что положительно сказывается на стабильности и скорости работы кода.

Разберем процесс преобразования по шагам:

  1. Создаем объект ЧтениеJSON, чтобы считать строку в структуру данных 1С.
  2. Используем метод ПрочитатьJSON, который автоматически распознает и преобразует Unicode-коды в понятные символы.
  3. Создаем объект ЗаписьJSON для формирования новой, «читаемой» строки из полученных данных.
  4. Выводим результат.

Посмотрим на пример кода, который реализует эту задачу:


// Исходная строка с экранированными символами
стрВход = "[{""id"": ""\u0422\u0430\u0442\u044c\u044f\u043d\u0430""}]";

// Инициализируем объект для чтения
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(стрВход);

// Превращаем JSON-строку в данные 1С
ДанныеЛога = ПрочитатьJSON(Чтение);
Чтение.Закрыть();

// Инициализируем объект для записи
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));

// Записываем данные обратно в строку
ЗаписатьJSON(Запись, ДанныеЛога);

// Получаем итоговый результат
Результат = Запись.Закрыть();
Сообщить(Результат); 
// В результате получим: [{"id":"Татьяна"}]

Почему этот способ лучший?

Во-первых, это «родной» функционал платформы. Использование ЧтениеJSON и ЗаписьJSON гарантирует, что все правила спецификации JSON будут соблюдены, а кодировка UTF-8 обработана корректно. Вам не нужно заботиться о том, как именно закодирован каждый символ, — платформа берет эту задачу на себя.

Во-вторых, производительность. В отличие от различных алгоритмов перебора строки посимвольно или вызова сторонних COM-объектов, встроенные механизмы работают на уровне ядра платформы, что обеспечивает максимальную скорость обработки даже больших объемов данных.

В-третьих, стабильность. Использование COM-объектов в серверном коде может приводить к проблемам с правами доступа или ошибкам в многопользовательской среде. Использование встроенных объектов ЧтениеJSON и ЗаписьJSON абсолютно безопасно и поддерживается во всех современных конфигурациях 1С.

Что делать, если версия платформы очень старая?

Если по какой-либо причине использование ЧтениеJSON невозможно (хотя это рекомендуется в первую очередь), разработчики иногда прибегают к использованию регулярных выражений через VBScript.RegExp. Однако мы настоятельно рекомендуем избегать этого метода, так как:

Таким образом, для большинства задач по парсингу JSON в 1С достаточно использовать связку ПрочитатьJSON и ЗаписатьJSON, что позволяет быстро и качественно привести данные к необходимому виду.

← На главную