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);
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

XML,Object,Json分析转换Xstream采用的更多相关文章

  1. json:JSONObject包的具体使用(JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包)

    1.JSONObject介绍 JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包. 2.下载jar包 http:// ...

  2. 个人永久性免费-Excel催化剂功能第90波-xml与json数据结构转换表格结构

    在网络时代,大量的数据交互以xml和json格式提供,特别是系统间的数据交互和网络WebAPI.WebService接口的数据提供,都是通过结构化的xml或json提供给其他应用调用返回数据.若能提供 ...

  3. java下XML与JSON互相转换的Utils类

    原文:http://heipark.iteye.com/blog/1394844 需要json-lib-2.1-jdk15.jar和xom-1.2.5.jar,maven pom.xml如下: < ...

  4. c#中 xml和json 互相转换

    --xml转json XmlDocument doc = new XmlDocument(); doc.LoadXml(result); string json = Newtonsoft.Json.J ...

  5. C#中XML和json互相转换

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Xm ...

  6. XML与JSON的转换

    -(void)test {          //XML文本范例     NSString *testXMLString = @"Cake0.55RegularChocolateBluebe ...

  7. nodejs XML和json互相转换

    Docs: https://www.npmjs.com/package/fast-xml-parser const xml = ` <user> <name>ajanuw< ...

  8. xStream完美转换XML、JSON

    xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:htt ...

  9. xStream完美转换XML、JSON(转)

    xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:htt ...

随机推荐

  1. Android 带你从源码的角度解析Scroller的滚动实现原理

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢! 今天给大 ...

  2. 0 and 1

    Description Andrewid the Android is a galaxy-famous detective. In his free time he likes to think ab ...

  3. robotframework ride 版本兼容问题

    在安装robotFramework ride的时候,必须需要使用wxpython 目前使用的wxpython 还必须是unicode 版本的要不然不支持中文 目前使用的 wx.version.2.8. ...

  4. 基础知识(9)- Swing用户界面组件

    9.1 Swing和模型-视图-控制器设计模式  9.1.1 设计模式  9.1.2 模型-视图-控制器模式  9.1.3 Swing按钮的模型-视图-控制器分析 9.2 布局管理概述  9.2.1 ...

  5. Twenty Newsgroups Classification任务之二seq2sparse(2)

    接上篇,SequenceFileTokenizerMapper的输出文件在/home/mahout/mahout-work-mahout0/20news-vectors/tokenized-docum ...

  6. MySQL字符集编码

    MySQL字符集编码总结 之前内部博客上凯哥分享了一篇关于mysql字符集的文章,之前我对mysql字符集一块基本没有深究过,看到凯哥文章后有些地方有点疑惑,遂自己去看了mysql的官方文档,并參考了 ...

  7. POJ 1862 &amp; ZOJ 1543 Stripies(贪心 | 优先队列)

    题目链接: PKU:http://poj.org/problem?id=1862 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  8. Delphi TStream 详细介绍

    Delphi TStream 详细介绍Stream对象,又称流式对象,是TStream.THandleStream.TFileStream.TMemoryStream.TResourceStream和 ...

  9. Android常用控件之RatingBar的使用

    RatingBar控件比较常见就是用来做评分控件,先上图看看什么是RatingBar 在布局文件中声明 <?xml version="1.0" encoding=" ...

  10. BI中事实表和维度表的定义

    一个典型的样例是,把逻辑业务比作一个立方体,产品维.时间维.地点维分别作为不同的坐标轴,而坐标轴的交点就是一个详细的事实.也就是说事实表是多个维度表的一个交点.而维度表是分析事实的一个窗体. 首先介绍 ...