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С обычно стабилен)
❗ У разных версий платформы сериализация некоторых типов может отличаться