Руководство пользователя XStream: JSON
1. обзор
Это третья статья в серии о XStream. Если вы хотите узнать о его базовом использовании вconverting Java objects to XML иvice versa, обратитесь к предыдущим статьям.
Помимо возможностей обработки XML, XStream также может конвертировать объекты Java в и из JSON. В этом уроке мы узнаем об этих функциях.
2. Предпосылки
Перед чтением этого руководства перейдите по ссылке: / xstream-serialize-object-to-xml,, в которой мы объясняем основы библиотеки.
3. зависимости
com.thoughtworks.xstream
xstream
1.4.5
4. Драйверы JSON
В предыдущих статьях мы узнали, как настроить экземпляр XStream и выбрать драйвер XML. Точно так же доступны два драйвера для преобразования объектов в JSON и из него:JsonHierarchicalStreamDriver иJettisonMappedXmlDriver.
4.1. JsonHierarchicalStreamDriverс
Этот класс драйвера может сериализовать объекты в JSON, но не способен десериализовать обратно к объектам. Он не требует каких-либо дополнительных зависимостей, и его класс драйвера является автономным.
4.2. JettisonMappedXmlDriverс
Этот класс драйверов способен конвертировать JSON в и из объектов. Используя этот класс драйвера, нам нужно добавить дополнительную зависимость дляjettison.
org.codehaus.jettison
jettison
1.3.7
5. Сериализация объекта в JSON
Создадим классCustomer:
public class Customer {
private String firstName;
private String lastName;
private Date dob;
private String age;
private List contactDetailsList;
// getters and setters
}
Обратите внимание, что мы (возможно, неожиданно) создалиage какString. Мы объясним этот выбор позже.
5.1. ИспользуяJsonHierarchicalStreamDriver
Мы передадимJsonHierarchicalStreamDriver для создания экземпляра XStream.
xstream = new XStream(new JsonHierarchicalStreamDriver());
dataJson = xstream.toXML(customer);
Это создает следующий JSON:
{
"com.example.pojo.Customer": {
"firstName": "John",
"lastName": "Doe",
"dob": "1986-02-14 16:22:18.186 UTC",
"age": "30",
"contactDetailsList": [
{
"mobile": "6673543265",
"landline": "0124-2460311"
},
{
"mobile": "4676543565",
"landline": "0120-223312"
}
]
}
}
5.2. JettisonMappedXmlDriver Реализация
Мы передадим классJettisonMappedXmlDriver для создания экземпляра.
xstream = new XStream(new JettisonMappedXmlDriver());
dataJson = xstream.toXML(customer);
Это создает следующий JSON:
{
"com.example.pojo.Customer": {
"firstName": "John",
"lastName": "Doe",
"dob": "1986-02-14 16:25:50.745 UTC",
"age": 30,
"contactDetailsList": [
{
"com.example.pojo.ContactDetails": [
{
"mobile": 6673543265,
"landline": "0124-2460311"
},
{
"mobile": 4676543565,
"landline": "0120-223312"
}
]
}
]
}
}
5.3. Анализ
Основываясь на выводе двух драйверов, мы ясно видим, что в сгенерированном JSON есть некоторые небольшие различия. Например,JettisonMappedXmlDriver опускает двойные кавычки для числовых значений, несмотря на то, что тип данных -java.lang.String: __
"mobile": 4676543565,
"age": 30,
JsonHierarchicalStreamDriver, с другой стороны, сохраняет двойные кавычки. __
6. Десериализация JSON в объект
Давайте возьмем следующий JSON, чтобы преобразовать его обратно в объектCustomer:
{
"customer": {
"firstName": "John",
"lastName": "Doe",
"dob": "1986-02-14 16:41:01.987 UTC",
"age": 30,
"contactDetailsList": [
{
"com.example.pojo.ContactDetails": [
{
"mobile": 6673543265,
"landline": "0124-2460311"
},
{
"mobile": 4676543565,
"landline": "0120-223312"
}
]
}
]
}
}
Напомним, что только один из драйверов (JettisonMappedXMLDriver) может десериализовать JSON. Попытка использовать_ _JsonHierarchicalStreamDriver для этой цели приведет кUnsupportedOperationException.
Используя драйвер Jettison, мы можем десериализовать объектCustomer:
customer = (Customer) xstream.fromXML(dataJson);
7. Заключение
В этой статье мы рассмотрели возможности обработки JSON XStream, преобразования объектов в JSON и из него. Мы также рассмотрели, как мы можем настроить наш вывод JSON, сделав его короче, проще и удобочитаемее.
Как и в случае с обработкой XML в XStream, есть и другие способы дальнейшей настройки способа сериализации JSON путем настройки экземпляра с использованием аннотаций или программной конфигурации. Дополнительные сведения и примеры см. Вfirst article in this series.
Полный исходный код с примерами можно скачать сlinked GitHub repository.