При получении данных от внешних 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-компонент, что положительно сказывается на стабильности и скорости работы кода.
Разберем процесс преобразования по шагам:
ЧтениеJSON, чтобы считать строку в структуру данных 1С.ПрочитатьJSON, который автоматически распознает и преобразует Unicode-коды в понятные символы.ЗаписьJSON для формирования новой, «читаемой» строки из полученных данных.Посмотрим на пример кода, который реализует эту задачу:
// Исходная строка с экранированными символами
стрВход = "[{""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. Однако мы настоятельно рекомендуем избегать этого метода, так как:
COM-объектами.\uXXXX в десятичные коды символов через функцию Символ().Таким образом, для большинства задач по парсингу JSON в 1С достаточно использовать связку ПрочитатьJSON и ЗаписатьJSON, что позволяет быстро и качественно привести данные к необходимому виду.