XStream

XStream是一个java对象和xml相互转换的工具

  1. 创建XStream对象:XStream stream = new XStream()
  2. Java对象转换成xml:stream .toXML(...)
  3. xml转换成Java对象:stream .fromXML(...)

转换装配方式

  1. DomDriver方式:new XStream(new DomDriver());
  2. StaxDriver方式:new XStream(new StaxDriver());
  3. XppDriver,默认方式,但是xpp方式经常解析xml会出错

Java转XML

1.导入jar

  1. xmlpull_1_0_5.jar
  2. xpp3_min-1.1.4c.jar
  3. xstream-1.4.4.jar

2.测试类

 public class TestC {
/**
* 控制台:
* xml:
* <list>
* <city id="1">
* <pid>1</pid>
* <cname>合肥</cname>
* </city>
* <city id="2">
* <pid>1</pid>
* <cname>芜湖</cname>
* </city>
* <city id="3">
* <pid>1</pid>
* <cname>蚌埠</cname>
* </city>
* <city id="4">
* <pid>1</pid>
* <cname>淮北</cname>
* </city>
* </list>
*/
@Test
public void test1() {//java--->xml
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖"));
list.add(new City(3,1,"蚌埠"));
list.add(new City(4,1,"淮北")); XStream stream = new XStream(new DomDriver());//DomDriver装配方式 //设置id为City.class标签的属性<com.qf.pojo.City id="">
stream.useAttributeFor(City.class, "id"); //使用别名city代替City.class <com.qf.pojo.City> ----> <city>
stream.alias("city", City.class); //list转换为xml字符串
String xml = stream.toXML(list); System.out.println("xml:\n"+xml);
} /**
* 控制台:com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser
*/
@Test
public void test2() {//xml--->java
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖"));
list.add(new City(3,1,"蚌埠"));
list.add(new City(4,1,"淮北")); //默认装配方式,使用的其实是XppDriver
XStream stream = new XStream();
//会抛出异常:com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser
String xml = stream.toXML(list); stream.processAnnotations(List.class);
Object fromXML = stream.fromXML(xml);
List city = List.class.cast(fromXML);
System.out.println("city:\n"+city);
} /**
* 控制台:
* city:
* [City [id=1, pid=1, cname=合肥], City [id=2, pid=1, cname=芜湖], City [id=3, pid=1, cname=蚌埠], City [id=4, pid=1, cname=淮北]]
*/
@Test
public void test3() {//xml--->java
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖"));
list.add(new City(3,1,"蚌埠"));
list.add(new City(4,1,"淮北")); XStream stream = new XStream(new DomDriver());
String xml = stream.toXML(list); stream.processAnnotations(List.class);
Object fromXML = stream.fromXML(xml);
List city = List.class.cast(fromXML);
System.out.println("city:\n"+city);
}
}

xpp装配方式创建XStream对象解析xml经常会出错:com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser

Java转JSON

xStream对JSON也有非常好的支持,它提供了2个模型驱动可以完成Java对象到JSON的相互转换

1.使用JettisonMappedXmlDriver驱动,可以将Java对象转换成json,也可以将json转换为Java对象需要添加jettison.jar

 package com.qf.Test;

 import java.util.ArrayList;
import java.util.List; import org.junit.Test; import com.qf.pojo.City;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; /**
* 测试用JettisonMappedXmlDriver实现与JSON的互相转换
* @author 14505
*
*/
public class TestJson {
/**
* Java--->json
* 控制台输出:
* {"list":[{"com.qf.pojo.City":[{"id":1,"pid":1,"cname":"合肥"},{"id":2,"pid":1,"cname":"芜湖"}]}]}
*/
@Test
public void test1() {
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖")); XStream stream = new XStream(new JettisonMappedXmlDriver()); stream.setMode(XStream.NO_REFERENCES); //list转换为Json字符串
String json = stream.toXML(list); System.out.println(json);
} /**
* json--->Java
* 控制台输出:
* [[City [id=1, pid=1, cname=合肥], City [id=2, pid=1, cname=芜湖]]]
*/
@Test
public void test2() {
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖")); XStream stream = new XStream(new JettisonMappedXmlDriver()); stream.setMode(XStream.NO_REFERENCES); //list转换为Json字符串
String json = stream.toXML(list); Object obj = stream.fromXML(json); System.out.println(obj);
}
}

2.使用JsonHierarchicalStreamDriver驱动,只能将Java对象转换成json

 package com.qf.Test;

 import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import org.junit.Test; import com.qf.pojo.City;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
import com.thoughtworks.xstream.io.json.JsonWriter; /**
* 测试用JsonHierarchicalStreamDriver实现java转换成JSON
* @author 14505
*
*/
public class TestJson {
/**
* Java--->json
* 控制台输出:
* JSON:{"map": [
* [
* "city1",
* {
* "id": 1,
* "pid": 1,
* "cname": "合肥"
* }
* ],
* [
* "city2",
* {
* "id": 2,
* "pid": 1,
* "cname": "芜湖"
* }
* ]
* ]}
*默认会给转换后的对象添加一个根节点,可以通过重写JsonHierarchicalStreamDriver的createWriter方法进行设置删除额外添加的根节点
*/
@Test
public void test1() {
City city1 = new City(1,1,"合肥");
City city2 = new City(2,1,"芜湖");
Map<String, City> map = new HashMap<>();
map.put("city1", city1);
map.put("city2", city2); XStream xStreamJ = new XStream(new JsonHierarchicalStreamDriver()); String json = xStreamJ.toXML(map);
System.out.println("JSON:"+ json);
} /**
* Java--->json
* 控制台输出:
* {"map": [
* [
* "city1",
* {
* "id": 1,
* "pid": 1,
* "cname": "合肥"
* }
* ],
* [
* "city2",
* {
* "id": 2,
* "pid": 1,
* "cname": "芜湖"
* }
* ]
* ]
* }
*/
@Test
public void test2() {
City city1 = new City(1,1,"合肥");
City city2 = new City(2,1,"芜湖");
Map<String, City> map = new HashMap<>();
map.put("city1", city1);
map.put("city2", city2); //默认会给转换后的json添加一个根节点JSON,重写JsonHierarchicalStreamDriver的createWriter方法可以设置删除根节点
XStream xStreamJ = new XStream(new JsonHierarchicalStreamDriver() {
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new JsonWriter(out,JsonWriter.DROP_ROOT_MODE);
}
}); String json = xStreamJ.toXML(map);
System.out.println("JSON:"+ json);
}
}

XStream的简单使用的更多相关文章

  1. XStream使用详解

    1.Xstream介绍 (1)Xstream介绍     Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需 ...

  2. java框架---->Xstream的使用(一)

    Xstream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称.今天我们就简单的学习一下xstream的用法. Xstream的简单实例 项目的结构如下,设计到三个类 ...

  3. 最受欢迎的Java第三方库

    前言 翻译自programcreek: 典型的Java项目通常会依赖一些第三方库,本文总结了一些最受欢迎的Java库,这些类库在各种应用程序中被广泛使用: 当然,Java SDK是最广泛使用的Java ...

  4. XStream简单入门

    简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...

  5. JAVA Bean和XML之间的相互转换 - XStream简单入门

    JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...

  6. XStream简单使用01——xml和Ojbect互转

    package org.zhb.test; /** * author : zhb * data : 2014-2-14 * use packages: * xmlpull-1.1.3.1.jar * ...

  7. XStream的使用方法、简单使用方法、xml的解析方法

    下面介绍的是在Android Studio中的使用 Android Studio中目前支持的Xstream最高版本是xstream-1.4.7.jar,大家可以在网上下载,我的是在开源中国项目中有这个 ...

  8. 简单使用XStream

    Stream1.什么作用 *可以把JavaBean转换为(序列化为)xml2.XStream的jar *核心jar:xstream-1.4.7.jar *必须依赖包:xpp3_min-1.1.4c(X ...

  9. 打造完美的xml技术解决方案(dom4j/xstream)

    转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...

随机推荐

  1. 49.求1+2+3+.......+n

    题目描述:   求1+2+3+...+n的值,要求不能使用乘除法,还有,if,while,for等关键字. 思路分析:   使用递归的解法,但是递归的终止条件需要使用if关键字不符合要求,所以我们利用 ...

  2. 定时任务crond介绍

    定时任务cornd crond介绍: crond是linux系统中用来定期(或周期性)执行命令或指定程序任务脚本的一种程序. 查看crontab帮助: [root@db01 ~]# crontab - ...

  3. C#设计模式:观察者模式(Observer Pattern)

    一,什么是观察者模式(Observer Pattern)? 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).比如,当一个对象被修改时,则会自动通知它的依赖对象 二,代码 ...

  4. Java面试宝典(3)Java基础部分

    51.启动一个线程是用run()还是start()? . 启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关 ...

  5. 2018-2-13-win10-UWP-显示地图

    title author date CreateTime categories win10 UWP 显示地图 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17: ...

  6. docker学习---搭建Docker私有库及删除库内镜像

    环境准备系统: cat /etc/redhat-release CentOS Linux release (Core) 主机两台,分别是docker私有库服务器(IP 192.168.121.121) ...

  7. Docker基础(下)

    Docker基础(下) 链接:https://pan.baidu.com/s/1u8Tg5qB4ZZHEK6GqCJkjwg 提取码:u8hb 复制这段内容后打开百度网盘手机App,操作更方便哦 5. ...

  8. Linux 定时任务 Crontab 命令详解

    linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ...

  9. 力扣——single number 2(只出现一次的数字 2) python实现

    题目描述: 中文: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? ...

  10. 如何在Mac上将视频刻录到DVD / ISO文件

    如果您希望将喜爱的视频转换为DVD / Blu-ray光盘以进行物理备份或播放,则Mac版Wondershare UniConverter可以专业地完成任务.今天的教程就是如何在Mac上轻松刻录DVD ...