详解XML,Object,Json转换与Xstream的使用
1.Xstream的特点:
这里直接引用Xstream官方的叙述:
2.初始化XStream类
说Xstream简单是因为它提供统一入口,主要类XStream用作所有项目的入口点。它将重要组件集成在一起,提供更简单易用的API操作。
我们可以使用以下的语句进行初始化操作:
XStreamxstream = new XStream();
默认情况下,XStream会 采用Xpp3库,XPP3是一种运行效率非常高的XML全解析实现。如果你不想依靠Xpp3库的话,也可以使用一个标准的JAXP DOM解析器,可以采用以下语句进行初始化:
//不使用XPP3库
XStreamxstream = new XStream(new DomDriver());
此xstream实例,为线程安全的,可以供多个线程进行调用,共享使用。参考 com.thoughtworks.xstream.io.xml包,会发现系统提供了多种标识解析器供我们选择,包括,DomDriver、 JDomDriver、StaxDriver等等。
前面提到了Xstream提供了对Json的支持,是因为Xstream内置了两个Driver:
1.JsonHierarchicalStreamDriver:不依赖其他类库,只实现 obj->JSON
2.JettisonMappedXmlDriver:依赖jettison类库,实现 JSON->obj or obj->JSON
两种Driver在处理相同设置的Object时会得到不同的JSON串,JsonHierarchicalStreamDriver得到的串更简洁,确如官网所说。
JsonHierarchicalStreamDriver有个小问题——默认输出带格式的JSON串,结构中带空格、换行,并且没有提供修饰方式。
3.常用方法:
xStream.toXML(object):将对象转换成XML、Json。 xStream.toXML(obj, outputStream):将对象转换XML、Json并封装成输出流。 xStream.toXML(object, writer): 将对象转换XML、Json并封成写入流。 xStream.fromXML():将XML、Json转换成对象,此方法接受File、InputStream、Reader、String、URL类型的参数。 xStream.alias("news", News.class):为指定类名创建别名。 xStream.useAttributeFor(News.class, "id"):将id设为 News的元素的属性。 xStream.aliasField("other", BookShelf.class,"remark"):修改节点名称,将BookShelf类中的remark节点名修改为other。 xStream.addImplicitCollection(BookShelf.class, "books"):去掉集体节点的父节点。 xStream.aliasAttribute("姓名", "name"):修改属性的name,为姓名。
4.实例1:将对象转换成XML
/** * 将对象转换成Xml格式的字符串 * @param object 要转换成Xml的对象 * @return String:Xml格式的字符串 */ public static String convertObject2Xml(Object object) { xStream=new XStream(); xStream.alias("news", News.class);//修改元素名称 xStream.useAttributeFor(News.class, "id");//将id设为News的元素的属性 return xStream.toXML(object); }
5.实例2:将XML象转换成对象
/** * 将成Xml格式的字符串转换成Java对象 * @param inputStream 要转换成Java对象的inputStream * @return String:Xml格式的字符串 */ public static Object convertXml2Object(InputStream inputStream) { xStream=new XStream(); xStream.alias("news", News.class);//修改元素名称 xStream.useAttributeFor(News.class, "id");//将id设为News的元素的属性 return xStream.fromXML(inputStream);//此方法也可将xml转换成map }
6.实例3:将对象转换成Json
/** * 将对象转换成Json格式的字符串 * @param object 要转换成Json的对象 * @return String:Json格式的字符串 */ public static String convertObject2Json(Object object) { xStream = new XStream(newJsonHierarchicalStreamDriver() { publicHierarchicalStreamWriter createWriter(Writer out) { //删除根节点 return new JsonWriter(out, JsonWriter.DROP_ROOT_MODE); } }); return xStream.toXML(object); }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。