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.