1. Сериализация структуры
Данные = Новый Structure("id, name", 25, "Item");
JSON = A1sJ.ToJSON(Данные);
Модуль A1sJ предоставляет компактный API для преобразования
произвольных значений в JSON‑строку и обратно, избавляя от прямой работы с
JSONWriter, JSONReader и параметрами сериализатора.
| Операция | Без A1sJ | С A1sJ | Снижение |
|---|---|---|---|
| Сериализация | 10 строк | 3 строки | ‑70 % |
| Десериализация | 12 строк | 4 строки | ‑67 % |
ToJSON(Value, NoSpaces=True, ShowMessage=False)FromJSON(JSONText, ReplaceSingleQuotes=False)Данные = Новый Structure("id, name", 25, "Item");
JSON = A1sJ.ToJSON(Данные);
Строка = A1sJ.ToJSON(Данные, Ложь, Истина);
JSONText = '{"count":10}';
Структура = A1sJ.FromJSON(JSONText, Истина);
Массив = Новый Array;
Массив.Add(1); Массив.Add(2);
JSON = A1sJ.ToJSON(Массив);
Массив2 = A1sJ.FromJSON(JSON);
////////////////////////////////////////////////////////////////////////////////////////////////
// A1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1sA1s //
////////////////////////////////////////////////////////////////////////////////////////////////
//
// A1s – compact and efficient library for 1C:Enterprise 8
//
// Copyright 2024–2025 Vadim Shchetinkin
// All rights reserved.
//
// This software is licensed for personal, educational and non-commercial use only.
// For commercial licensing please contact a1scode@yandex.com
//
// URL : https://github.com/actitrend/A1s
// Version : 1.0.0
// Flags : Server + External connection
// Requires : 1C 8.3.10 +
// Requires Modules: -
//
////////////////////////////////////////////////////////////////////////////////////////////////
#Region A1sJ_ModuleMap
// A1sJ (flags: Server + External connection)
//│ Requires: -
//│
//├─ #Region A1sJ_ToJSON
//│ Преобразует значение в JSON-строку
//│
//└─ #Region A1sJ_FromJSON
// Преобразует JSON-строку обратно в значение
#EndRegion
#Region A1sJ_ToJSON
&AtServer
Function ToJSON(Value, NoSpaces=True, ShowMessage=False) Export
JSONWriter = New JSONWriter;
If boolean(NoSpaces) Then
pJSON = New JSONWriterSettings(JSONLineBreak.None, "");
Else
pJSON = New JSONWriterSettings(JSONLineBreak.Auto, " ");
EndIf;
JSONWriter.SetString(pJSON);
Try
XDTOSerializer.WriteJSON(JSONWriter, Value, XMLTypeAssignment.Explicit);
JSONText = JSONWriter.Close();
Except
JSONText = "";
EndTry;
If Boolean(ShowMessage) Then
Message(JSONText);
EndIf;
Return JSONText;
EndFunction
#Region examples_A1sJ_ToJSON
// Пример:
// json = A1sJ.ToJSON(Массив, Истина);
// json = A1sJ.ToJSON(Структура, Ложь, Истина);
#EndRegion
#EndRegion
#Region A1sJ_FromJSON
&AtServer
Function FromJSON(JSONText, ReplaceSingleQuotes=false) Export
If boolean(ReplaceSingleQuotes)=true Then
JSONText = StrReplace(JSONText, "'","""");
EndIf;
JSONReader = New JSONReader;
JSONReader.SetString(JSONText);
Try
Value = XDTOSerializer.ReadJSON(JSONReader);
Except
Value = Undefined;
EndTry;
JSONReader.Close();
Return Value;
EndFunction
#Region examples_A1sJ_FromJSON
// Пример:
// Структура = A1sJ.FromJSON(ТекстJSON);
// Структура = A1sJ.FromJSON(ТекстJSON, Истина);
#EndRegion
#EndRegion
#Region A1sJ_JsonEqual
&AtServer
// Функция для сравнения множества значений (ТаблицаЗначений или другие типы)
// с использованием JSON-сериализации. Нормализация JSON отключена.
//
// Параметры:
// Value1, Value2, ..., Value8 (Произвольный) - Значения для сравнения.
//
// Возвращаемое значение:
// Булево - Истина, если все переданные значения равны, Ложь - если есть различия.
//
Function JsonEqual(Value1 = Undefined, Value2 = Undefined, Value3 = Undefined, Value4 = Undefined, Value5 = Undefined,
Value6 = Undefined, Value7 = Undefined, Value8 = Undefined) 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;
EndFunction
#Region examples_A1sJ_JsonEqual
// Пример 1: сравнение простых значений
// Результат = A1sJ.JsonEqual(1, 1); // Истина
// Результат = A1sJ.JsonEqual("foo", "bar"); // Ложь
// Пример 2: сравнение структур
// Структура1 = Новый Структура("a,b", 1, 2);
// Структура2 = Новый Структура("a,b", 1, 2);
// Результат = A1sJ.JsonEqual(Структура1, Структура2); // Истина
// Пример 3: сравнение табличных значений
// Таблица1 = Новый ТаблицаЗначений;
// Таблица1.Колонки.Добавить("Колонка");
// Таблица1.Добавить();
// Таблица2 = Таблица1.Скопировать();
// Результат = A1sJ.JsonEqual(Таблица1, Таблица2); // Истина
// Пример 4: сравнение нескольких значений сразу
// Результат = A1sJ.JsonEqual(1, 1, "a", "a", Структура1, Структура2); // Истина
// Пример 5: нет переданных значений (ничего не сравниваем)
// Результат = A1sJ.JsonEqual(); // Истина
#EndRegion
#EndRegion
// ---------------------------- EOF A1sJ ---------------------------------
////////////////////////////////////////////////////////////////////////////////
//
// ███ ██ █████
// █ █ ███ █
// ██████ ██ ████
// █ █ ██ █
// █ █ █████ █████
//
// A1s — Compact Code Library for 1C:Enterprise 8
// https://github.com/actitrend/A1s
//
////////////////////////////////////////////////////////////////////////////////