Skip to content

Сериализация пользовательских классов OneScript в JSON

License

Notifications You must be signed in to change notification settings

oscript-library/jason

 
 

Repository files navigation

Jason — JSON-сериализация для OneScript

Jason — библиотека на OneScript для сериализации и десериализации JSON. Поддерживает примитивы, коллекции и пользовательские классы через аннотации и рефлексию.

  • Пользовательские классы с поддержкой настроек сериализации через аннотации &Сериализуемое и &Несериализуемое
  • Типизация полей для автоматической десериализации сложн объектов
  • Коллекции: Массив, Структура, Соответствие (вложенные структуры поддерживаются)
  • Совместимость: OneScript 2.0.0-rc.8+

Установка

opm install jason

Подключение и быстрый старт

#Использовать jason

Сериализация:

Сериализатор = Новый СериализаторJson();
JSON = Сериализатор.Сериализовать(Значение);

Десериализация (в пользовательский класс):

Десериализатор = Новый ДесериализаторJson();
Объект = Десериализатор.Десериализовать(СтрокаJSON, Тип("ИмяКласса"));

Пользовательские классы и аннотации

Jason использует annotations для управления списком полей:

  • &Сериализуемое — необязательная аннотация. По умолчанию все заполненные поля объекта сериализуются. Аннотация нужна для настройки:
    • Значение — имя свойства в JSON (переименование)
    • Обязательное — включать поле в JSON даже при значении Неопределено
  • &Несериализуемое — исключает поле из сериализации

Пример класса (упрощённо):

&Сериализуемое
Перем Строка;

// Поле будет включено в JSON даже без явного указания
Перем Число;
&Несериализуемое
// Поле не будет включено в JSON
Перем Временное;

&Сериализуемое("renamed_field")
 // Поле будет включено в JSON с именем renamed_field
Перем Переименованное;

&Сериализуемое(Обязательное = Истина)
// Поле будет включено в JSON, даже если оно не заполнено в объекте
Перем ОбязательноеПоле;

Имена свойств в JSON соответствуют именам полей (если явно не переименованы аннотацией &Сериализуемое). Поддерживаются кириллические имена.

Поддерживаемые типы

  • Примитивы: Число, Строка, Булево, Дата, Null/Неопределено
  • Коллекции: Массив, Структура, Соответствие
  • Пользовательские классы (через рефлексию и аннотации)

Особенности десериализации:

  • JSON null читается как Неопределено.
  • JSON-объект без указанного целевого типа читается как Соответствие.
  • Внутри массива JSON-объекты будут иметь тип Соответствие (если не задан конкретный тип элемента).
  • Если явно указать тип результата, например Тип("Структура"), то корневой JSON-объект будет приведён к Структуре.

Примеры

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

Данные = Новый Структура("Имя, Возраст", "Тест", 25);
JSON = Новый СериализаторJson().Сериализовать(Данные);

Десериализация в класс:

// ТестовыйКласс.os

&Сериализуемое("number")
Перем Число Экспорт; 

Перем Строка Экспорт;
JSON = "{""Строка"":""значение"",""number"":10}";
Объект = Новый ДесериализаторJson().Десериализовать(JSON, Тип("ТестовыйКласс"));

Ожидаем.Что(Объект).ИмеетТип("ТестовыйКласс");
Ожидаем.Что(Объект.Строка).Равно("Значение");
Ожидаем.Что(Объект.Число).Равно(10);

Больше примеров — в папке tests/ (файлы Сериализация.os, Десериализация.os).

Тесты

Тесты на OneUnit:

oneunit execute

Лицензия

Этот проект лицензируется под лицензией MIT. Подробности см. в файле LICENSE.md.

About

Сериализация пользовательских классов OneScript в JSON

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • 1C Enterprise 100.0%