Как убрать кавычки у булевых значений true и false в строке JSON в 1С

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

При интеграции систем часто возникает ситуация, когда при формировании JSON-пакета логические значения (булево) передаются как строки в кавычках (например, "true" вместо true). Это может привести к ошибкам на стороне принимающей системы, которая ожидает строгий тип данных Boolean. В этой статье мы подробно разберем, почему возникает такая проблема и какими способами ее можно решить в среде 1С:Предприятие 8.

Выясним причину проблемы

Проблема кроется в строгой типизации данных. В 1С, если переменной присвоено значение типа Строка (например, "true"), то встроенные механизмы сериализации JSON (такие как ЗаписатьJSON) честно заключают это значение в двойные кавычки. Для того чтобы в JSON попало значение без кавычек, переменная в исходной структуре 1С должна иметь тип Булево (значения Истина или Ложь). Рассмотрим ситуацию, когда мы формируем структуру вручную и случайно передаем туда строку:


Данные = Новый Структура;
Данные.Вставить("isFirstNameChanged", "true"); // Здесь ошибка: передана строка

При преобразовании такой структуры в JSON мы неизбежно получим "isFirstNameChanged":"true". Чтобы этого избежать, необходимо контролировать типы данных еще на этапе наполнения коллекции.

Способ 1. Исправление JSON-строки через СтрЗаменить (Быстрое решение)

Если JSON-строка уже сформирована и нам нужно оперативно «подправить» ее перед отправкой, можно воспользоваться функцией СтрЗаменить. Проанализируем, как правильно передать двойные кавычки в качестве параметра функции.

В языке 1С двойная кавычка внутри строки экранируется еще одной кавычкой. Таким образом, чтобы найти в тексте строку "true" (включая кавычки), нам нужно написать три кавычки подряд с каждой стороны. Разберем рабочий пример, который помог автору темы:


// ПараметрыPOST — это наша исходная строка JSON
ПараметрыPOST = СтрЗаменить(ПараметрыPOST, """true""", "true");
ПараметрыPOST = СтрЗаменить(ПараметрыPOST, """false""", "false");

Важный нюанс: Этот метод является «костылем». Рассмотрим риски: если в данных (например, в фамилии клиента или в комментарии) встретится слово "true", оно также лишится кавычек, что сделает JSON невалидным. Используйте этот метод только в том случае, если вы полностью уверены в составе данных.

Способ 2. Правильная типизация данных в структуре

Проанализируем более надежный подход. Вместо того чтобы исправлять уже готовую строку, следует правильно подготовить объект Структура или Соответствие перед вызовом сериализатора. Посмотрим на пример кода, который исправляет поведение системы:


ДанныеEq = Новый Структура;
ДанныеEq.Вставить("data", Новый Массив);

// Правильное присвоение значений типа Булево
isFirstNameChanged = Истина; // Используем встроенный тип 1С
firstName = "Ранис";

НоваяЗапись = Новый Структура("isFirstNameChanged, firstName", isFirstNameChanged, firstName);
ДанныеEq.data.Добавить(НоваяЗапись);

// Сериализация в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеEq);
СтрокаJSON = ЗаписьJSON.Закрыть();

В этом случае 1С автоматически сформирует корректный JSON без лишних кавычек вокруг true, так как она видит, что переменная isFirstNameChanged имеет тип Булево.

Способ 3. Преобразование строки в логический тип при динамическом формировании

Если данные приходят к вам из внешнего источника (например, из формы или текстового файла) в виде строк, обязательно выполните преобразование типов. Рассмотрим, как это сделать максимально просто:


// Предположим, ЗначениеИзФайла = "true" (тип Строка)
Если ЗначениеИзФайла = "true" Тогда
    ЛогическоеЗначение = Истина;
ИначеЕсли ЗначениеИзФайла = "false" Тогда
    ЛогическоеЗначение = Ложь;
КонецЕсли;

// Теперь ЛогическоеЗначение можно смело вставлять в Структуру для JSON

Способ 4. Использование регулярных выражений для безопасной замены

Для более продвинутых случаев, когда простая замена СтрЗаменить может повредить текстовые поля, рекомендуется использовать объект VBScript.RegExp. Это позволит заменить кавычки только там, где они стоят после двоеточия (то есть являются значением, а не ключом или частью текста).

Проанализируем логику работы регулярного выражения:

  1. Ищем комбинацию символов : "true".
  2. Заменяем ее на : true.

Это значительно снижает риск ложных срабатываний. Пример шаблона для поиска: ":\s*""(true|false)""".

Рекомендации по проверке результата

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


Чтение = Новый ЧтениеJSON;
Попытка
    Чтение.УстановитьСтроку(ПараметрыPOST);
    Результат = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    Сообщить("JSON валиден");
Исключение
    Сообщить("Ошибка в структуре JSON: " + ОписаниеОшибки());
КонецПопытки;

Резюме

Мы разобрали несколько способов решения проблемы лишних кавычек. Самый правильный путь — следить за типами данных в структурах и массивах 1С, используя Истина и Ложь вместо строк "true" и "false". Если же вы вынуждены работать с готовым текстом, используйте СтрЗаменить с экранированием кавычек ("""true"""), но делайте это с осторожностью, чтобы не повредить полезную информацию внутри строковых полей.

← На главную