xstream解析xml
XStream库可以是将JSON从Java转换为XML来回转换的有效工具。让我们逐一探究它们中的每一个,并查看使用了哪个驱动程序。
处理JSON
要将JSON转换为Java对象,您所要做的就是使用适当的驱动程序初始化XStream对象,并准备将对象序列化到JSON或从JSON序列化。
XStream当前提供了两个用于JSON到对象ocnversion的驱动程序:
- JsonHierarchicalStreamDriver:
- 这没有附加的依赖关系,但是只能用于编写XML
- JettisonMappedXmlDriver:这是基于Jettison的,还可以再次将JSON反序列化为Java对象。
Jettison驱动程序
Jettison驱动程序使用Jettison StAX解析器读取和写入JSON格式的数据。 从1.2.2版开始,它在XStream中可用,并在com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver类中实现。
为了使此工作正常,我们需要在pom中添加依赖项:
<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的代码:
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.toXML(xml); //converts Object to JSON
xstream.fromXML(obj); //Converts Json to Object
将对象序列化为XML
要将对象序列化为XML XStream,请使用2个驱动程序:
- StaxDriver
XStream xstream = new XStream(new StaxDriver()); xstream.toXML(xml); //converts Object to XML xstream.fromXML(obj); //Converts XML to Object
- DomDriver
XStream xstream = new XStream(new DomDriver()); xstream.toXML(xml); //converts Object to XML xstream.fromXML(obj); //Converts XML to Object
最后,让我们在一个班级中查看所有这些内容:
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类进行测试:
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());
}
}
完整的代码可以在这里看到。在下一个博客中,我们将比较用例,探索适合的用例。
翻译自: https://www.javacodegeeks.com/2014/07/converting-json-to-xml-to-java-objects-using-xstream.html
xstream解析xml