xJsonKit
Сверхлёгкий фреймворк для сериализации и десериализации JSON, JSONB, XML и YAML.
Введение
xJsonKit — это сверхлёгкий фреймворк, который предоставляет фасадные API для сериализации и десериализации данных в форматах JSON, JSONB, XML и YAML. Он позволяет отделить бизнес-код от конкретной реализации и обеспечивает гибкость при выборе библиотеки для работы с данными.
Установка
Для использования xJsonKit необходимо добавить зависимости в файл сборки проекта (например, build.gradle).
API-зависимость:
implementation 'cn.zhxu:xjsonkit-api:1.5.0'
Эта зависимость предоставляет четыре инструментальных класса: JsonKit, JsonbKit, XmlKit и YamlKit. Они предоставляют API для операций сериализации и десериализации для соответствующих форматов данных.
Зависимости для конкретных реализаций:
JSON:
// Fastjson 实现
implementation 'cn.zhxu:xjsonkit-fastjson:1.5.0'
// Fastjson2 实现
implementation 'cn.zhxu:xjsonkit-fastjson2:1.5.0'
// Gson 实现
implementation 'cn.zhxu:xjsonkit-gson:1.5.0'
// Jackson 实现
implementation 'cn.zhxu:xjsonkit-jackson:1.5.0'
// Snack3 实现
implementation 'cn.zhxu:xjsonkit-snack3:1.5.0'
JSONB:
// Fastjson2-JSONB 实现
implementation 'cn.zhxu:xjsonkit-fastjson2-jsonb:1.5.0'
XML:
// Jackson Xml
implementation 'cn.zhxu:xjsonkit-jackson-xml:1.5.0'
YAML:
// Jackson Yaml
implementation 'cn.zhxu:xjsonkit-jackson-yaml:1.5.0'
Использование
Фреймворк xJsonKit предоставляет четыре инструментальных класса для работы с данными: JsonKit, JsonbKit, XmlKit и YamlKit. В этом разделе будет рассмотрен пример использования класса JsonKit. Другие классы используются аналогичным образом.
Десериализация в Mapper:
String json = "{\"name\":\"Jack\",\"age\":20}";
// Преобразование в объект Mapper
Mapper mapper = JsonKit.toMapper(json);
// Размер первого уровня ключей
int size = mapper.size(); // 2
// Набор ключей первого уровня
Set<String> keys = mapper.keySet(); // ["name", "age"]
// Доступ к свойству String по ключу
String name = mapper.getString("name"); // Jack
// Доступ к int-свойству по ключу
int age = mapper.getInt("age"); // 20
// Итерация по объекту Mapper
mapper.forEach((key, data) -> {
System.out.println(key); // Последовательно выводит name и age
System.out.println(data); // Последовательно выводит Jack и 20
});
System.out.println(mapper); // Выводит {"name":"Jack","age":20}
System.out.println(mapper.toPretty()); // Форматированный вывод
Десериализация в массив:
String json = "[20,{\"name\":\"Jack\"},\"JsonKit\"]";
// Преобразование в массив Array
Array array = JsonKit.toArray(json);
// Размер массива
int size = array.size(); // 3
// Получение int-данных по индексу
int value = array.getInt(0); // 20
// Получение объекта Mapper по индексу
Mapper mapper = array.getMapper(1); // {"name":"Jack"}
// Получение строки по индексу
String string = array.getString(2); // JsonKit
// Итерация по массиву
array.forEach(((index, data) -> {
System.out.println(index); // Последовательно выводит 0, 1 и 2
System.out.println(data); // Последовательно выводит 20, {"name":"Jack"} и JsonKit
}));
System.out.println(array); // Выводит [20,{"name":"Jack"},"JsonKit"]
System.out.println(array.toPretty()); // Форматированный вывод
Десериализация в Java Bean:
String json = "{\"name\":\"Jack\",\"age\":20}";
// Десериализация согласно типу в Java Bean
User user = JsonKit.toBean(User.class, json);
String name = user.getName(); // Jack
int age = user.getAge(); // 20
Десериализация в список:
String json = "[{\"name\":\"Jack\",\"age\":20}, {\"name\":\"Tom\",\"age\":21}]";
// Десериализация согласно типу в List
List<User> list = JsonKit.toList(User.class, json);
int size = list.size(); // 2
User user1 = list.get(0); // {"name":"Jack","age":20}
User user2 = list.get(1); // {"name":"Tom","age":21}
Сериализация в JSON:
User user = new User();
user.setName("Jack");
user.setAge(20);
String json = JsonKit.toJson(user); // Преобразование в строку JSON
System.out.println(json); // Выводит {"age":20,"name":"Jack"}
String pretty = JsonKit.toPretty(user); // Форматированная строка JSON
String pretty = JsonKit.toJson(user, true);
Преобразование форматов:
var json = "[{\"id\":1,\"name\":\"Jack\"},{\"id\":2,\"name\":\"Tom\"}]";
// в XML
var xml = XmlKit.toXml(JsonKit.toArray(json));
// в YAML
var yaml = XmlKit.toYaml(JsonKit.toArray(json));
// в JSONB
var jsonb = JsonbKit.toBytes(JsonKit.toArray(json));
XML объект в JSON, YAML, JSONB
var xml = "<root><id>1</id><name>Jack</name><age>20</age></root>";
// в JSON
var json = JsonKit.toJson(XmlKit.toMapper(xml));
// в YAML
var yaml = XmlKit.toYaml(XmlKit.toMapper(xml));
// в JSONB
var jsonb = JsonbKit.toBytes(XmlKit.toMapper(xml));
XML массив в JSON, YAML, JSONB
var xml = "<list><item><id>1</id><name>Jack</name></item><item><id>2</id><name>Tom</name></item></list>";
// в JSON
var json = JsonKit.toJson(XmlKit.toArray(xml));
// в YAML
var yaml = XmlKit.toYaml(XmlKit.toArray(xml));
// в JSONB
var jsonb = JsonbKit.toBytes(XmlKit.toArray(xml));
И так далее (преобразование YAML и JSONB в другие форматы аналогично).
Если вы уже добавили базовый пакет реализации, такой как xjsonkit-jackson
, то вы можете использовать его без дополнительной настройки.
Но если вам нужна специальная настройка, например, при использовании Jackson, вы можете выполнить следующую настройку:
ObjectMapper objectMapper = new ObjectMapper();
// TODO: настроить ObjectMapper...
// Настроить JsonKit
Config.json(new JacksonDataConvertor(ObjectMapper));
Здесь Config
— это класс конфигурации в пакете cn.zhxu.xjson.spi
, который содержит четыре метода конфигурации: json()
, jsonb()
, xml()
и yaml()
, которые применяются к четырём инструментальным классам: JsonKit
, JsonbKit
, XmlKit
и YamlKit
.
Просто реализуйте интерфейс DataConvertor
:
// Пользовательская реализация JSON
Config.json(new MyJsonDataConvertor());
// Пользовательская реализация JSONB
Config.jsonb(new MyJsonbDataConvertor());
// Пользовательская реализация XML
Config.xml(new MyXmlDataConvertor());
// Пользовательская реализация YAML
Config.yaml(new MyYamlDataConvertor());
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )