Ръководство за потребителя на XStream: JSON

1. Общ преглед

Това е третата статия от поредицата за XStream. Ако искате да научите за основното му използване при конвертиране на Java обекти в XML и обратно, моля, вижте предишните статии.

Освен възможностите си за XML обработка, XStream може също да конвертира Java обекти в и от JSON. В този урок ще научим за тези функции.

2. Предпоставки

Преди да прочетете този урок, моля, прегледайте първата статия от тази поредица , в която обясняваме основите на библиотеката.

3. Зависимости

 com.thoughtworks.xstream xstream 1.4.5 

4. JSON драйвери

В предишните статии научихме как да настроим екземпляр XStream и да изберем XML драйвер. По същия начин са налични два драйвера за конвертиране на обекти към и от JSON: JsonHierarchicalStreamDriver и JettisonMappedXmlDriver .

4.1. JsonHierarchicalStreamDriver

Този клас драйвер може да сериализира обекти в JSON, но не е способен да десериализира обратно към обекти. Той не изисква никакви допълнителни зависимости и неговият клас драйвер е самостоятелен.

4.2. JettisonMappedXmlDriver

Този клас драйвер може да преобразува JSON към и от обекти. Използвайки този клас драйвери, трябва да добавим допълнителна зависимост за изхвърляне .

 org.codehaus.jettison jettison 1.3.7 

5. Сериализиране на обект в JSON

Нека създадем клиентски клас:

public class Customer { private String firstName; private String lastName; private Date dob; private String age; private List contactDetailsList; // getters and setters }

Имайте предвид, че създадохме (може би неочаквано) възраст като низ . Ще обясним този избор по-късно.

5.1. Използване на JsonHierarchicalStreamDriver

Ще предадем JsonHierarchicalStreamDriver, за да създадем екземпляр XStream.

xstream = new XStream(new JsonHierarchicalStreamDriver()); dataJson = xstream.toXML(customer);

Това генерира следния JSON:

{ "com.baeldung.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.baeldung.pojo.Customer": { "firstName": "John", "lastName": "Doe", "dob": "1986-02-14 16:25:50.745 UTC", "age": 30, "contactDetailsList": [ { "com.baeldung.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": { "firstName": "John", "lastName": "Doe", "dob": "1986-02-14 16:41:01.987 UTC", "age": 30, "contactDetailsList": [ { "com.baeldung.pojo.ContactDetails": [ { "mobile": 6673543265, "landline": "0124-2460311" }, { "mobile": 4676543565, "landline": "0120-223312" } ] } ] } }

Спомнете си, че само един от драйверите ( JettisonMappedXMLDriver ) може да десериализира JSON. Опит за използванеJsonHierarchicalStreamDriver за тази цел ще доведе до UnsupportedOperationException .

Използвайки драйвера Jettison, можем да десериализираме обекта на клиента :

customer = (Customer) xstream.fromXML(dataJson);

7. Заключение

В тази статия разгледахме възможностите за обработка на JSON XStream, конвертирайки обекти към и от JSON. Също така разгледахме как можем да променим изхода на JSON, като го направим по-кратък, по-опростен и по-четлив.

Както при XStream XML обработката, има и други начини, по които можем допълнително да персонализираме начина на сериализиране на JSON, като конфигурираме екземпляра, използвайки или анотации, или програмна конфигурация. За повече подробности и примери вижте първата статия от тази поредица.

Пълният изходен код с примери може да бъде изтеглен от свързаното хранилище на GitHub.