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

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

请尊重他人的劳动成果,转载请注明出处:XML,Object,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的支持,是因为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);
    }
时间: 2024-12-13 15:06:18

XML,Object,Json转换之浅析Xstream的使用的相关文章

JavaWeb学习之XStream AJAX省市联动(XML,JSON)

一.XStream作用 XStream可以把JavaBean对象和XML字符串互相转换 二.XStream应用 ①.下载jar文件,并导入到工程 没找到下载的网站就自己分享链接: https://pan.baidu.com/s/1XVDZEiweqByNa2yruFMJ9w 提取码: hkv9 导入这两个jar文件 原文地址:https://www.cnblogs.com/WarBlog/p/12599994.html

XML与JSON的对比

XML与JSON的对比 1.各自定义 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准. XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交

揭开 JSON 的神秘面纱 ------【XML和JSON的异同】

JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML, 但它比 XML 更小.更快,更易解析.   XML XML (Extensible Markup Language) 指可扩展标记语言,它被设计用来传输和存储数据. 要表示一个object (指name-value pair的集合),最初可能会使用element作为object,每个key-value pair 用 attribute 表示

atitit.XML类库选型及object 对象bean 跟json转换方案

atitit.XML类库选型及object 对象bean 跟json转换方案 1. XML类库可以分成2大类.标准的.这些类库通常接口和实现都是分开的 1 2. 常见的xml方面的方法 2 2.1. xml解析 2 2.2. bean与xml互相转换 2 2.3. json与xml的互相转换 2 3. 大名鼎鼎的 DOM  绿色环保的 SAX 默默无闻的 Digester 2 3.1. 默默无闻的 Digester:XML 的 JavaBean 化 2 4. Digester 解析 XML 3

xStream转换XML、JSON

一. 简介 xStream可以很容易实现Java对象和xml文档互相转换, 可以修改某个特定的属性和节点名称,xStream提供annotation注解, 可以在JavaBean中完成对xml节点和属性的描述,并支持Json的转换,只需要提供相关的JSONDriver就能完成转换 官方网站: http://xstream.codehaus.org/tutorial.html 二. 准备工作 1. 环境准备: Jar文件下载地址: https://nexus.codehaus.org/conten

xStream完美转换XML、JSON

xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 它们都完美支持JSON,但是对xml的支持还不是很好.一定程度上限制了对Java对象的描述,不能让xml完全体现到对Java对象的描述.这里将会介绍xStream对JSON.XML的完美支持.xStream不仅对XML的转换非常友好,而且提供annotation注解,可以在JavaBean中完成对xml节点.属性的描述.以及对JSON也支持,只需要提供

X-stream完美转换XML、JSON

一.准备工作 1. 下载jar包.及官方资源 xStream的jar下载地址:https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/xstream-distribution/1.3.1/xstream-distribution-1.3.1-bin.zip 官方的示例很全,官方参考示例:http://xstream.codehaus.org/tutorial.html 添加xstream-

xStream完美转换XML、JSON(转)

xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html 以及Jackson这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html 它们都完美支持JSON,

XStream解析xml和json

XStream是一个在我看来比较好的一个第三方包了.因为它在解析时支持注解.这样很是方便,并且xml跟json这两种格式的文件都能进行解析,XStream本属于java的一个第三方包,甚是好用,若是拿它在android开发环境,也是能正常解析,但有点美中不足,因为android开发环境时,XStream不太支持json转对象,只支持对象转json,其他xml与对象的互转都支持.这样的话双解析就有了那么一点瑕疵之处,不过话说回来,没多少需求的数据交互会用json跟xml切来切去的,当只是json转