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 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...
随机推荐
- 04-初始mysql语句
本节课先对mysql的基本语法初体验. 操作文件夹(库) 增 create database db1 charset utf8; 查 # 查看当前创建的数据库 show create database ...
- python第三方库安装失败处理方法
各位道友,是不是在使用pip 命令安装第三方库遇到了以下情形呢? 这种情况可真让人头疼啊..经过几番周折,终于找到了认为最有效的解决方法 首先 先把要安装的包下载下来,不管用什么方式 在这里我用的迅雷 ...
- matplotlib系列——饼图
import matplotlib.pyplot as plt import numpy as np import matplotlib import sys 1.主体函数 #饼图 def die(l ...
- Goals ? Ideals ?
Why is it important to set goals ? Because goal can help you do , be , and experience anything you w ...
- FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012951123/article/details/36871955 <span style= ...
- Groovy学习:第一章 用Groovy简化Java代码
1. Groovy的安装 目前Groovy的最新版本为2.1.2版,下载地址为:http://groovy.codehaus.org/Download下载后解压groovy-binary-2.1.2. ...
- Python之基本的日期与时间转换 datetime、 dateutil模块
简单举例datetime模块 from datetime import timedelta,datetime a = timedelta(days=2, hours=6) b = timedelta( ...
- Idea maven项目不能新建package和class的解决【转】
如图,新建的maven项目不能新建package 这是因为java是普通的文件夹,要设置为 现在就可以了 博客原链接:http://blog.csdn.net/qq_24949727/article/ ...
- 低门槛彻底理解JavaScript中的深拷贝和浅拷贝
作者 | 吴胜斌 来源 | https://www.simbawu.com/article/search/9 在说深拷贝与浅拷贝前,我们先看两个简单的案例: //案例1var num1 = 1, nu ...
- 【leetcode】948. Bag of Tokens
题目如下: You have an initial power P, an initial score of 0 points, and a bag of tokens. Each token can ...