您的位置:首页 > Web前端 > JavaScript

xstream学习,对象和xml之间转换,对象和json之间转换

2015-07-15 22:21 686 查看
1、测试对象

package domain;

import java.util.Date;

public class User {
private String name;
private int age;
private Date birthday;
private Car car;
private List<Book> books;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", birthday=" + birthday
+ ", car=" + "Car [brand=" + car.getBrand() + ", price=" + car.getPrice() + ", factory="
+ car.getFactory() + "]" + ", books=" + books + "]";
}

}


package domain;

public class Book {

private String bookName;
private double price;
private String author;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book [bookName=" + bookName + ", price=" + price + ", author="
+ author + "]";
}

}


package domain;

public class Car {

private String brand;
private double price;
private String factory;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getFactory() {
return factory;
}
public void setFactory(String factory) {
this.factory = factory;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", price=" + price + ", factory="
+ factory + "]";
}

}


2、对象到xml的转换

package test;

import java.util.ArrayList;

public class TestBean2XML {

//XStream 同时可以转换list和map
public static void main(String[] args) {
//		map2XML();
//------Car对象-----//
Car car = new Car();
car.setBrand("宝马");
car.setFactory("上汽");
car.setPrice(500000);
//------Car对象-----//

//------Book对象-----//
Book book1 = new Book();
book1.setBookName("语文");
book1.setAuthor("张三");
book1.setPrice(40.6);
Book book2 = new Book();
book2.setBookName("数学");
book2.setAuthor("李四");
book2.setPrice(23.5);
Book book3 = new Book();
book3.setBookName("英语");
book3.setAuthor("王五");
book3.setPrice(34);
//------Book对象-----//

//------User对象-----//
User user = new User();
user.setName("小红");
user.setAge(12);
user.setBirthday(new Date());
user.setCar(car);
List<Book> list = new ArrayList<Book>();
list.add(book1);
list.add(book2);
list.add(book3);
user.setBooks(list);
//------User对象-----//

//测试根据bean生成xml
XStream xStream = new XStream();
//		xStream.alias("user", User.class);
//将类重命名
xStream.aliasType("用户", User.class);
xStream.alias("book", Book.class);
xStream.alias("car", Car.class);
/*
*/

//测试重命名属性
/*
xStream.aliasField("姓名", User.class, "name");
xStream.aliasField("汽车价格", Car.class, "price");
xStream.aliasField("作者", Book.class, "author");
*/

//测试将字段申明在 xml的属性节点上,而非文本节点上,并重命名
xStream.aliasAttribute(User.class, "name", "姓名");
xStream.aliasAttribute(Car.class, "price", "汽车价格");
xStream.aliasAttribute(Book.class, "author", "作者");
String xml = xStream.toXML(user);
//		System.out.println(xml);
}

//将map转换为xml
public static void map2XML(){
Map<String, Book> map = new HashMap<String, Book>();
Book bean1 = new Book();
bean1.setBookName("语文");
bean1.setPrice(234);
bean1.setAuthor("张三");
Book bean2 = new Book();
bean2.setBookName("语文");
bean2.setPrice(123);
bean2.setAuthor("李四");

map.put("No.1", bean1);//put
map.put("No.3", bean2);//put
XStream xStream = new XStream();
xStream.alias("book", Book.class);
xStream.alias("key", String.class);
xStream.useAttributeFor(Book.class, "bookName");
String xml = xStream.toXML(map);
System.out.println(xml);
}
}


3、xml到对象的转换

package test;

import java.text.ParseException;

public class TestXML2Bean {

static String xml = "<user name = \"小红\">"+
"<age>12</age>"+
"<birthday>2015-07-14 14:33:42.567 UTC</birthday>"+
"<car>"+
"<brand>宝马</brand>"+
"<price>500000.0</price>"+
"<factory>上汽</factory>"+
"</car>"+
"<books>"+
"<book>"+
"<bookName>语文</bookName>"+
"<price>40.6</price>"+
"<author>张三</author>"+
"</book>"+
"<book>"+
"<bookName>数学</bookName>"+
"<price>23.5</price>"+
"<author>李四</author>"+
"</book>"+
"<book>"+
"<bookName>英语</bookName>"+
"<price>34.0</price>"+
"<author>王五</author>"+
"</book>"+
"</books>"+
"</user>";
public static void main(String[] args) {
//这里一定要是用 DomDriver才能fromXML
XStream xStream = new XStream(new DomDriver());
xStream.alias("user", User.class);
xStream.alias("book", Book.class);
xStream.alias("car", Car.class);

xStream.registerConverter( new DateConverter());
//如果是属性节点要同步设置xStream
xStream.aliasAttribute(User.class,"name","name");
User user = (User)xStream.fromXML(xml);
System.out.println(user.toString());
}
}
class DateConverter  implements Converter {
@Override
public boolean canConvert(Class arg0) {

return Date.class == arg0;
}
@Override
public void marshal(Object arg0, HierarchicalStreamWriter arg1,
MarshallingContext arg2) {

}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext arg1) {
GregorianCalendar calendar = new GregorianCalendar();
SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd"); //格式化当前系统日期
try {
calendar.setTime(dateFm.parse(reader.getValue()));
} catch (ParseException e) {
throw new ConversionException(e.getMessage(), e);
}
return calendar.getTime();

}
}


4、对象到json的转换

package test;

import java.io.Writer;

public class TestBean2JSON {

public static void main(String[] args) {
Car car = new Car();
car.setBrand("宝马");
car.setFactory("上汽");
car.setPrice(500000);
// ------Car对象-----//

// ------Book对象-----//
Book book1 = new Book();
book1.setBookName("语文");
book1.setAuthor("张三");
book1.setPrice(40.6);
Book book2 = new Book();
book2.setBookName("数学");
book2.setAuthor("李四");
book2.setPrice(23.5);
Book book3 = new Book();
book3.setBookName("英语");
book3.setAuthor("王五");
book3.setPrice(34);
// ------Book对象-----//

// ------User对象-----//
User user = new User();
user.setName("小红");
user.setAge(12);
user.setBirthday(new Date());
user.setCar(car);
List<Book> list = new ArrayList<Book>();
list.add(book1);
list.add(book2);
list.add(book3);
user.setBooks(list);

//使用JettisonMappedXmlDriver驱动转换
/*
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
*/

//使用JsonHierarchicalStreamDriver驱动转换
// 删除根节点

XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new JsonWriter(out, JsonWriter.DROP_ROOT_MODE);
}
});

xstream.alias("user", User.class);
xstream.alias("book", Book.class);
xstream.alias("car", Car.class);
String xml = xstream.toXML(user);
System.out.println(xml);
}
}


5、json到对象的转换

package test;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

import domain.Book;
import domain.Car;
import domain.User;

public class TestJSON2Bean {

static String json = "{\"user\": {"+
"\"name\": \"小红\","+
"\"age\": 12,"+
"\"birthday\": \"2015-07-15 13:51:18.907 UTC\","+
"\"car\": {"+
"\"brand\": \"宝马\","+
"\"price\": 500000.0,"+
"\"factory\": \"上汽\""+
"},"+
"\"books\": ["+
"{"+
"\"bookName\": \"语文\","+
"\"price\": 40.6,"+
"\"author\": \"张三\""+
"},"+
"{"+
"\"bookName\": \"数学\","+
"\"price\": 23.5,"+
"\"author\": \"李四\""+
"},"+
"{"+
"\"bookName\": \"英语\","+
"\"price\": 34.0,"+
"\"author\": \"王五\""+
"}"+
"]"+
"}}";

static String json1 = "{\"books\": ["+
"{"+
"\"bookName\": \"语文\","+
"\"price\": 40.6,"+
"\"author\": \"张三\""+
"},"+
"{"+
"\"bookName\": \"数学\","+
"\"price\": 23.5,"+
"\"author\": \"李四\""+
"},"+
"{"+
"\"bookName\": \"英语\","+
"\"price\": 34.0,"+
"\"author\": \"王五\""+
"}"+
"]}";
public static void main(String[] args) {
System.out.println(json);
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.alias("user", User.class);
xstream.alias("book", Book.class);
xstream.alias("car", Car.class);
User user = (User)xstream.fromXML(json);
//最后失败,貌似不能转 集合
System.out.println(user.toString());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: