XML,Object,Json转换之浅析Xstream的使用

前端之家收集整理的这篇文章主要介绍了XML,Object,Json转换之浅析Xstream的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

XML,Object,Json转换之浅析Xstream的使用

请尊重他人的劳动成果,转载请注明出处:XML,Json转换之浅析Xstream的使用

XStream的是一个简单的库,主要用于Java对象和XML之间的转换。但XStream也内置了对Json的支持

1.Xstream的特点:

这里直接引用Xstream官方的叙述:

灵活易用:在更高的层次上提供了简单、灵活、易用的统一接口,用户无需了解项目的底层细节

无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操作

高速稳定:设计时力求达到的最重要的指标是解析速度快、占用内存少,以使之能够适用于大的对象处理或是对信息吞吐量要求高的系统

清晰易懂:项目采用reflection机制得到无冗余信息的XML文件。所生成的XML文件较本地Java序列化产物更简洁,格式更清晰,更便于用户阅读

无需修改完全序列化包括private和final类型在内的全部内部字段。支持非公有类和内部类,类可以没有缺省的构造函数

易于集成:通过实现特定的接口,XStream可以直接与其它任何树型结构进行序列化与反序列化操作(而不仅仅是XML格式)

灵活转换:转换策略是可以定制的,允许用户自定义特殊类型的对象如何以XML格式存储。

错误处理:由于XML资料不合法而造成异常时,会提供详细地诊断信息帮助处理问题。

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支持,是因为内置了两个Driver

1.JsonHierarchicalStreamDriver:不依赖其他类库,只实现obj->JSON

2.JettisonMappedXmlDriver:依赖jettison类库,实现JSON->obj or obj->JSON

两种Driver在处理相同设置的Object时会得到不同的JSON串,JsonHierarchicalStreamDriver得到的串更简洁,确如官网所说。

JsonHierarchicalStreamDriver有个小问题——默认输出带格式的JSON串,结构中带空格、换行,并且没有提供修饰方式。

3.常用方法

xStream.toXML(object)将对象转换成XMLJson

xStream.toXML(obj,outputStream):将对象转换并封装成输出流。

xStream.toXML(object,writer):并封成写入流。

xStream.fromXML()转换成对象,此方法接受FileInputStreamReaderStringURL类型的参数。

xStream.alias(@H_404_173@"news",News.class)为指定类名创建别名。

xStream.useAttributeFor(News.class,@H_404_173@"id"):将id设为News的元素的属性

xStream.aliasField(@H_404_173@"other",BookShelf."remark"):修改节点名称,BookShelf类中的remark节点名修改other

xStream.addImplicitCollection(BookShelf."books")去掉集体节点的父节点。

xStream.aliasAttribute(@H_404_173@"@H_404_173@姓名@H_404_173@",255)">"name")修改属性name,为姓名。

4.实例1:将对象转换成XML

[java] view plain copy
  1. /**@H_731_301@
  2. *将对象转换成Xml格式的字符串@H_731_301@
  3. *@paramobject要转换成Xml的对象@H_731_301@
  4. *@returnString:Xml格式的字符串@H_731_301@
  5. */@H_731_301@
  6. publicstaticStringconvertObject2Xml(Objectobject){@H_731_301@
  7. xStream=newXStream();@H_731_301@
  8. xStream.alias("news",News.class);//修改元素名称@H_731_301@
  9. xStream.useAttributeFor(News.class,"id");//将id设为News的元素的属性@H_731_301@
  10. returnxStream.toXML(object);@H_731_301@
  11. }@H_731_301@

5.实例2:将XML象转换成对象

*将成Xml格式的字符串转换成Java对象@H_731_301@
  • *@paraminputStream要转换成Java对象的inputStream@H_731_301@
  • staticObjectconvertXml2Object(InputStreaminputStream){@H_731_301@
  • xStream=returnxStream.fromXML(inputStream);//此方法也可将xml转换成map@H_731_301@
  • }@H_731_301@


  • 6.实例3:将对象转换成Json
    *将对象转换成Json格式的字符串@H_731_301@
  • *@paramobject要转换成Json的对象@H_731_301@
  • *@returnString:Json格式的字符串@H_731_301@
  • staticStringconvertObject2Json(Objectobject){@H_731_301@
  • xStream=newXStream(newJsonHierarchicalStreamDriver(){@H_731_301@
  • publicHierarchicalStreamWritercreateWriter(Writerout){@H_731_301@
  • //删除根节点@H_731_301@
  • returnnewJsonWriter(out,JsonWriter.DROP_ROOT_MODE);@H_731_301@
  • }@H_731_301@
  • });@H_731_301@
  • returnxStream.toXML(object);@H_731_301@
  • }@H_731_301@
  • 原文链接:https://www.f2er.com/xml/296680.html

    猜你在找的XML相关文章