Библиотека XStream может быть эффективным инструментом для преобразования JSON в Java в переводы XML туда и обратно.
Давайте рассмотрим каждый из них один за другим и посмотрим, какой драйвер используется.
Обработка JSON
Для преобразования JSON в объекты Java все, что вам нужно сделать, — это инициализировать объект XStream с помощью соответствующего драйвера, и вы готовы сериализовать свои объекты в (и из) JSON.
В настоящее время XStream поставляет два драйвера для JSON для Object ocnversion:
- JsonHierarchicalStreamDriver: это не имеет дополнительной зависимости, но может использоваться только для написания XML
- JettisonMappedXmlDriver: это основано на Jettison и может снова десериализовать JSON в объекты Java.
Водитель джеттисон
Драйвер Jettison использует анализатор Jettison StAX для чтения и записи данных в формате JSON. Он доступен в XStream начиная с версии 1.2.2 и реализован в классе com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver.
Чтобы это заработало, нам нужно добавить зависимости в pom:
|
01
02
03
04
05
06
07
08
09
10
11
12
|
<dependencies> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>org.codehaus.jettison</groupId> <artifactId>jettison</artifactId> <version>1.1</version> </dependency> </dependencies> |
И код для преобразования JSON в объект и объект в Json:
|
1
2
3
|
XStream xstream = new XStream(new JettisonMappedXmlDriver());xstream.toXML(xml); //converts Object to JSONxstream.fromXML(obj); //Converts Json to Object |
Сериализация объекта в XML
Для сериализации объекта в XML XStream использует 2 драйвера:
- StaxDriver
- DomDriver
|
1
2
3
|
XStream xstream = new XStream(new StaxDriver());xstream.toXML(xml); //converts Object to XMLxstream.fromXML(obj); //Converts XML to Object |
|
1
2
3
|
XStream xstream = new XStream(new DomDriver());xstream.toXML(xml); //converts Object to XMLxstream.fromXML(obj); //Converts XML to Object |
Наконец, давайте рассмотрим все это в одном классе:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
package com.anirudh;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;import com.thoughtworks.xstream.io.xml.DomDriver;import com.thoughtworks.xstream.io.xml.StaxDriver;/** * Created by anirudh on 15/07/14. */public class Transformer<T> { private static final XStream XSTREAM_INSTANCE = null; public T getObjectFromJSON(String json){ return (T) getInstance().fromXML(json); } public String getJSONFromObject(T t){ return getInstance().toXML(t); } private XStream getInstance(){ if(XSTREAM_INSTANCE==null){ return new XStream(new JettisonMappedXmlDriver()); } else { return XSTREAM_INSTANCE; } } public T getObjectFromXML(String xml){ return (T)getStaxDriverInstance().fromXML(xml); } public String getXMLFromObject(T t){ return getStaxDriverInstance().toXML(t); } public T getObjectFromXMLUsingDomDriver(String xml){ return (T)getDomDriverInstance().fromXML(xml); } public String getXMLFromObjectUsingDomDriver(T t){ return getDomDriverInstance().toXML(t); } private XStream getStaxDriverInstance(){ if(XSTREAM_INSTANCE==null) { return new XStream(new StaxDriver()); }else{ return XSTREAM_INSTANCE; } } private XStream getDomDriverInstance(){ if(XSTREAM_INSTANCE==null){ return new XStream(new DomDriver()); }else{ return XSTREAM_INSTANCE; } }} |
Напишите класс JUnit для его проверки:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package com.anirudh;import com.anirudh.domain.Product;import org.junit.Before;import org.junit.Test;/** * Created by anirudh on 15/07/14. */public class TransformerTest { private Transformer<Product> productTransformer; private Product product; @Before public void init(){ productTransformer = new Transformer<Product>(); product = new Product(123,"Banana",23.00); } @Test public void testJSONToObject(){ String json = productTransformer.getJSONFromObject(product); System.out.println(json); Product convertedproduct = productTransformer.getObjectFromJSON(json); System.out.println(convertedproduct.getName()); } @Test public void testXMLtoObjectForStax(){ String xml = productTransformer.getXMLFromObject(product); System.out.println(xml); Product convertedproduct = productTransformer.getObjectFromXML(xml); System.out.println(convertedproduct.getName()); } @Test public void testXMLtoObjectForDom(){ String xml = productTransformer.getXMLFromObjectUsingDomDriver(product); System.out.println(xml); Product convertedproduct = productTransformer.getObjectFromXMLUsingDomDriver(xml); System.out.println(convertedproduct.getName()); }} |
Полный код можно увидеть здесь .
В следующем блоге мы сравним варианты использования, выяснив, куда вписывается.
| Ссылка: | Преобразование JSON в XML для объектов Java с помощью XStream от нашего партнера по JCG Анируд Бхатнагар из блога anirudh bhatnagar . |