xstream学习,对象和xml之间转换,对象和json之间转换
2015-07-15 22:21
686 查看
1、测试对象
2、对象到xml的转换
3、xml到对象的转换
4、对象到json的转换
5、json到对象的转换
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()); } }
相关文章推荐
- Angular.js VS. Ember.js:谁将成为Web开发的新宠?
- js 易错点
- 一种用javascript实现的比较兼容的回到顶部demo + 阻止事件冒泡
- Chrome谷歌浏览器如何禁用JavaScript
- JSP与HTML的区别
- Javascript浏览器对象模型BoM要点总结
- ES6 详解二: 新增内容概览
- JSP方便路径
- js日期格式化-----总结
- jsp页面时间获取并判断
- JavaScript Window
- JS高级程序设计7-函数表达式
- JSR 303 - Bean Validation 简介及使用方法
- 8 张思维导图学习 Javascript
- 不同数据类型与Json之间的转换
- MVVM开源框架Knot.js 教程1 - CBS初步
- jsonKit第三方包错误解决方案
- javaScript基础概念整理1(数据类型)
- js ||与&&
- 接口post +json +bean