A1s | Модуль A1sJ

Введение

Модуль A1sJ предоставляет компактный API для преобразования произвольных значений в JSON‑строку и обратно, избавляя от прямой работы с JSONWriter, JSONReader и параметрами сериализатора.

Преимущества (25 операций)

Операция Без A1sJ С A1sJ Снижение
Сериализация 10 строк 3 строки ‑70 %
Десериализация 12 строк 4 строки ‑67 %
benefits chart

API

Примеры

1. Сериализация структуры

Данные = Новый Structure("id, name", 25, "Item");
JSON = A1sJ.ToJSON(Данные);

2. Форматированный вывод JSON

Строка = A1sJ.ToJSON(Данные, Ложь, Истина);

3. Десериализация с заменой кавычек

JSONText = '{"count":10}';
Структура = A1sJ.FromJSON(JSONText, Истина);

4. Конвертация массива

Массив = Новый Array;
Массив.Add(1); Массив.Add(2);
JSON = A1sJ.ToJSON(Массив);
Массив2 = A1sJ.FromJSON(JSON);

Исходный код A1sJ



        ////////////////////////////////////////////////////////////////////////////////////////////////
        // 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
                          //
                          ////////////////////////////////////////////////////////////////////////////////