XStream的简单使用
XStream
XStream是一个java对象和xml相互转换的工具
- 创建XStream对象:XStream stream = new XStream()
- Java对象转换成xml:stream .toXML(...)
- xml转换成Java对象:stream .fromXML(...)
转换装配方式
- DomDriver方式:new XStream(new DomDriver());
- StaxDriver方式:new XStream(new StaxDriver());
- XppDriver,默认方式,但是xpp方式经常解析xml会出错
Java转XML
1.导入jar
- xmlpull_1_0_5.jar
- xpp3_min-1.1.4c.jar
- 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的简单使用的更多相关文章
- XStream使用详解
1.Xstream介绍 (1)Xstream介绍 Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需 ...
- java框架---->Xstream的使用(一)
Xstream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称.今天我们就简单的学习一下xstream的用法. Xstream的简单实例 项目的结构如下,设计到三个类 ...
- 最受欢迎的Java第三方库
前言 翻译自programcreek: 典型的Java项目通常会依赖一些第三方库,本文总结了一些最受欢迎的Java库,这些类库在各种应用程序中被广泛使用: 当然,Java SDK是最广泛使用的Java ...
- XStream简单入门
简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...
- JAVA Bean和XML之间的相互转换 - XStream简单入门
JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...
- XStream简单使用01——xml和Ojbect互转
package org.zhb.test; /** * author : zhb * data : 2014-2-14 * use packages: * xmlpull-1.1.3.1.jar * ...
- XStream的使用方法、简单使用方法、xml的解析方法
下面介绍的是在Android Studio中的使用 Android Studio中目前支持的Xstream最高版本是xstream-1.4.7.jar,大家可以在网上下载,我的是在开源中国项目中有这个 ...
- 简单使用XStream
Stream1.什么作用 *可以把JavaBean转换为(序列化为)xml2.XStream的jar *核心jar:xstream-1.4.7.jar *必须依赖包:xpp3_min-1.1.4c(X ...
- 打造完美的xml技术解决方案(dom4j/xstream)
转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...
随机推荐
- 这是什么b
用table表格标签渲染总排名和总分数据 <!DOCTYPE html> <html lang="zh"> <head> <meta ch ...
- 52-python基础-python3-列表-常用列表方法- reverse()方法
reverse()方法 永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse() 即可. 实例:
- HDU 5159 Card( 计数 期望 )
Card Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- java虚拟机规范(se8)——class文件格式(五)
4.7.1 定义和命名新属性 允许编译器定义和发布的class文件在class文件结构体.field_info结构体.method_info结构体和Code结构体中的attributes表中包含新的属 ...
- css中的文本字间距离、行距、overflow
css字间距.div css字符间距样式实例1.text-indent设置抬头距离css缩进 div设置css样式text-indent : 20px; 缩进了20px 2.letter-spacin ...
- Python面向对象初始(三大特征,多态,继承,封装)
Python面向对象的初始 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的 ...
- 11.Container With Most Water (Array; Two-Pointers)
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- 个人公众号服务端开发Demo
公众号出来很久了,也可以个人申请.知道公众号的服务端开发其实很简单,接口调用封装,数据存取,不外如是. 人一旦懒了,真的是 “无可救药” 了...现简单描述晚到的公众号HelloWorld 思路 公众 ...
- K8S操作
一.K8Spods操作 kubectl delete all --all //删除 所有pods
- 使用IntelliJ IDEA 15和Maven创建Java Web项目(转)
转自:https://blog.csdn.net/myarrow/article/details/50824793 1. Maven简介 相对于传统的项目,Maven 下管理和构建的项目真的非常好用和 ...