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

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

(0)

相关推荐

  • java中使用sax解析xml的解决方法

    在java中,原生解析xml文档的方式有两种,分别是:Dom解析和Sax解析 Dom解析功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因此适用于小文档 Sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档 本文主要讲解Sax解析,其余放在后面 Sax采用事件驱动的方式解析文档.简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回回读取) 在看电影的过程中,每遇到一个情节,一段泪水,一次擦肩,你都会调动大脑和神经去接收或

  • Jaxb2实现JavaBean与xml互转的方法详解

    本文实例讲述了Jaxb2实现JavaBean与xml互转的方法.分享给大家供大家参考,具体如下: 一.简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档. Jaxb 2.0是JDK 1.6的组成部分.我们不需要下载第三方jar包 即可做到轻松转换.Jaxb2使用了JD

  • xml与Java对象的转换详解

    xml与Java对象的转换详解 1.xstream解析报文 XStreamComponent x = XStreamComponent.newInstance(); x.processAnnotations(new Class[]{EquityExchangeDetail.class,PearTicketCustomerDTO.class,Date.class,Integer.class}); EquityExchangeDetail ptd = (EquityExchangeDetail) x

  • 使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题

    后端也存在java user object类,利用xstream组件把list中的user对象序列化成xml数据.在flex端通过httpservice使用E4X format格式获取.刚开始自己准备通过e4x技术来解析xml,构造flex user object,类似这样的处理方式: 复制代码 代码如下: public function fromXML(currentNode:XML):void{ userID = new Number(currentNode.userID); userNam

  • Java生成和解析XML格式文件和字符串的实例代码

    1.基础知识: Java解析XML一般有四种方法:DOM.SAX.JDOM.DOM4J. 2.使用介绍 1).DOM (1)简介 由W3C(org.w3c.dom)提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作.优点就是整个文档都一直在内存中,我们可以随时访问任何节点,并且对树的遍历也是比较熟悉的操作:缺点则是耗内存,并且必须等到所有的文档都读入内存才能进行处理. (2)示例代码: 复制代码 代码如下: <?xml version="1.0&quo

  • 使用JSP + JAVABEAN + XML 开发的一个例子

    本例子是参考了一些网站上有关JSP 对 XML 的操作的相关文档,又结合了一些个人的体会.例子涉及的内容是,开发的一个企业内部定餐系统后台管理端的部分代码,功能主要集中在对于餐馆基本信息的管理. 该例子本身开发的起因是我在原公司和同事们一个玩笑的一部分.特此也表达对那些一起共事的朋友们的想念. 例子本身是在TOMCAT4.01 平台下运行的B/S结构的程式.有关TOMCAT 的配置,这里不做说明.只讲解一下相关文件及文件夹的目录结构. 目录结构说明:/tomcat/webapps/canyin/

  • 在java中使用dom4j解析xml(示例代码)

    虽然Java中已经有了Dom和Sax这两种标准解析方式 但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心 为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具 鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作 Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了 首先我们需要出创建一个xml文档,然后才能对其解析 xml文档: 复制代码 代码如下: <?xml version="1.0" encoding=&quo

  • java使用xpath解析xml示例分享

    XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言.XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初 XPath 的提出的初衷是将其作为一个通用的.介于XPointer与XSL间的语法模型.但是 XPath 很快的被开发者采用来当作小型查询语言. XPathTest.java 复制代码 代码如下: package com.hongyuan.test; import java.io.File;import java

  • Javabean基于xstream包实现转XML文档的方法

    本文实例讲述了Javabean基于xstream包实现转XML文档的方法.分享给大家供大家参考,具体如下: 1. 所需Jar包: xpp3_min.jar xstream.jar 本站下载地址. 把这两个jar所添加到项目中 2. 添加两个用于测试的javabean:Province和City class Province { private String name;// 省名 private List<City> cities = new ArrayList<City>(); p

  • java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解

    1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不是像SAX那

  • Java如何读取XML文件 具体实现

    今天的CSDN常见问题来讲解下在Java中如何读取XML文件的内容. 直接上代码吧,注释写的很清楚了! 复制代码 代码如下: import java.io.*;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;im

  • XStream使用方法总结附实例代码

    XStream中的核心类就是XStream类,一般来说,熟悉这个类基本就够用了,如果你用的更多,估计是你设计有问题,否则不需要. XStream对象相当Java对象和XML之间的转换器,转换过程是双向的.创建XSteam对象的方式很简单,只需要new XStream()即可. Java到xml,用toXML()方法. Xml到Java,用fromXML()方法. 在没有任何设置默认情况下,java到xml的映射,是java成员名对应xml的元素名,java类的全名对应xml根元素的名字.而实际中

随机推荐