A1sCode библиотека 1С

A1sJ.JsonEqual

Назначение: сравнить несколько значений, сериализуя каждое в JSON и сверяя строки.
Идея: «глубокое» сравнение по содержимому, а не по ссылкам.

Сигнатура

Function JsonEqual(Value1 = Undefined, Value2 = Undefined, Value3 = Undefined, Value4 = Undefined, Value5 = Undefined, Value6 = Undefined, Value7 = Undefined, Value8 = Undefined) Export

Как работает (по исходному коду)

 Export

    // Создаем массив из переданных значений (определенные значения Undefined не добавляем)
    Values = New Array;

    If Value1 <> Undefined Then
        Values.Add(Value1);
    EndIf;
    If Value2 <> Undefined Then
        Values.Add(Value2);
    EndIf;
    If Value3 <> Undefined Then
        Values.Add(Value3);
    EndIf;
    If Value4 <> Undefined Then
        Values.Add(Value4);
    EndIf;
    If Value5 <> Undefined Then
        Values.Add(Value5);
    EndIf;
    If Value6 <> Undefined Then
        Values.Add(Value6);
    EndIf;
    If Value7 <> Undefined Then
        Values.Add(Value7);
    EndIf;
    If Value8 <> Undefined Then
        Values.Add(Value8);
    EndIf;


    If Values.Count() = 0 Then
        // Если ни одного значения не передано, считаем, что все "равны" (или нужно выбросить исключение?)
        Return True;
    EndIf;

    // Сериализуем первое значение в JSON как эталон
    EtalonJSON = ToJSON(Values[0]);

    // Сравниваем все остальные значения с эталоном
    For Each Value In Values Do //Используем итератор для обхода массива
        CurrentJSON = ToJSON(Value);

        If EtalonJSON <> CurrentJSON Then
            // Найдено различие
            Return False;
        EndIf;
    EndDo;

    // Все значения равны
    Return True;

Параметры

  • Value1..Value8 — до восьми значений для сравнения. Undefined пропускаются.

Возвращает

Булево — Истина, если все переданные значения равны по JSON‑представлению.

Примеры

// Равны
A1sJ.JsonEqual(Новый Структура("X,Y",5,10), Новый Структура("X,Y",5,10)); // → Истина
// Не равны
A1sJ.JsonEqual(1, 2); // → Ложь
// Несколько значений
A1sJ.JsonEqual(1, 1, 1, 1); // → Истина

Нюансы и ограничения

✅ Удобно для автотестов и сравнения сложных структур
❗ Порядок полей/элементов важен для строки JSON (для структур — 1С обычно стабилен)
❗ У разных версий платформы сериализация некоторых типов может отличаться