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.