详解XML,Object,Json转换与Xstream的使用

 更新时间:2017年02月11日 11:43:20   作者:CrazyCodeBoy   我要评论
这篇文章主要介绍了详解XML,Object,Json转换与Xstream的使用的相关资料,需要的朋友可以参考下

详解XML,Object,Json转换与Xstream的使用

1.Xstream的特点:

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

  1. 灵活易用:在更高的层次上提供了简单、灵活、易用的统一接口,用户无需了解项目的底层细节
  2. 无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操作
  3. 高速稳定:设计时力求达到的最重要的指标是解析速度快、占用内存少,以使之能够适用于大的对象处理或是对信息吞吐量要求高的系统
  4. 清晰易懂:项目采用reflection机制得到无冗余信息的XML文件。所生成 的XML文件较本地Java序列化产物更简洁,格式更清晰,更便于用户阅读
  5. 无需修改:完全序列化包括private和final类型在内的全部内部字段。支 持非公有类和内部类,类可以没有缺省的构造函数
  6. 易于集成:通过实现特定的接口,XStream可以直接与其它任何树型结构进行序列化与反序 列化操作(而不仅仅是XML格式)
  7. 灵活转换:转换策略是可以定制的,允许用户自定义特殊类型的对象如何以XML格式存储。
  8. 错误处理:由于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);    
  } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • futuretask源码分析(推荐)

    futuretask源码分析(推荐)

    这篇文章主要介绍了futuretask源码分析(推荐),小编觉得还是挺不错的,这里给大家分享下,供各位参考。
    2017-10-10
  • 如何在IDEA Maven项目中导入本地jar包的步骤

    如何在IDEA Maven项目中导入本地jar包的步骤

    今天小编就为大家分享一篇关于IDEA Maven项目中导入本地jar包的步骤,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 详解Java中的checked异常和unchecked异常区别

    详解Java中的checked异常和unchecked异常区别

    这篇文章主要介绍了详解Java中的checked异常和unchecked异常区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 简介Java的Spring框架的体系结构以及安装配置

    简介Java的Spring框架的体系结构以及安装配置

    这篇文章主要介绍了Java的Spring框架的体系结构以及安装配置,Spring框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • Java 给图片和动图添加水印的方法

    Java 给图片和动图添加水印的方法

    本篇文章主要介绍了Java 给图片和动图添加水印的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • springmvc数据的封装过程详解

    springmvc数据的封装过程详解

    这篇文章主要介绍了springmvc数据的封装过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 通过代码快速理解Java的三种代理模式

    通过代码快速理解Java的三种代理模式

    这篇文章主要介绍了通过代码快速理解Java的三种代理模式,代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。,需要的朋友可以参考下
    2019-06-06
  • 如何利用 Either 和 Option 进行函数式错误处理

    如何利用 Either 和 Option 进行函数式错误处理

    这篇文章主要介绍了如何利用 Either 和 Option 进行函数式错误处理。在 Java 中,错误的处理在传统上由异常以及创建和传播异常的语言支持进行。但是,如果不存在结构化异常处理又如何呢?,需要的朋友可以参考下
    2019-06-06
  • java实现一次性压缩多个文件到zip中的方法示例

    java实现一次性压缩多个文件到zip中的方法示例

    这篇文章主要介绍了java实现一次性压缩多个文件到zip中的方法,涉及java针对文件批量压缩相关的文件判断、遍历、压缩等操作技巧,需要的朋友可以参考下
    2019-09-09
  • 浅谈Java中的n种随机数产生办法

    浅谈Java中的n种随机数产生办法

    众所周知,随机数是任何一种编程语言最基本的特征之一。而生成随机数的基本方式也是相同的:产生一个0到1之间的随机数。看似简单,但有时我们也会忽略了一些有趣的功能。
    2015-09-09

最新评论