-
本文介绍JavaBean到XML和JSON的转换,使用XStream时应该还会对它进行细究,或作进一步的扩展,如把某个JavaBean属性生成XML时作为另一属性生成的XML节点的属性,而不是子节点。
XML和JSON是当今常用的两种数据描述与传输的格式,特别是涉及到JS时使用JSON颇为频繁。自然,在Java的世界里少不了完成JavaBean与这两种格式相互转换的组件,那就是XStream和JSON-lib。这里我简单记下XStream的用法。
其实相类似的工具早已有之。如果用过DWR的同志,一定有印像,DWR进行远程方法调用时也能为你完成JavaBean和JSON格式的双向转换的,所依赖的是它的各种Converter。再要是对Struts1的细节有所注意的话,Struts1的ActionServlet在初始化struts-config.xml时是通过commons-digester来完成XML到JavaBean转换的。相应的Apache也有一个commons-betwixt实现了JavaBean到XML的生成。
而我这里要说的XStream把JavaBean到XML和JSON的转换实现了,而JSON-lib则如其名,功能太显简陋了。要使用XStream,需下载到xstream包,当前版本是1.3.1。然后把xstream-1.x.x.jar添加到项目的Classpath上,可不依赖于其他包。在某些有要求时候才需要用到lib目录中的其他包,下面会提到。
简单说明XStream的使用吧,分为JavaBean->XML、JavaBean->JSON两部分内容。在开始例子之前,先定义三个类(都在com.unmi.model包中):
- publicclassCustomer{
- privateintcustId;
- privateStringcustName;
- privateList<Order>orders;
- //setter/getter和构造方法略
- }
- publicclassOrder{
- privateintorderId;
- privateStringorderName;
- privateProduct[]products;
- //setter/getter和构造方法略
- }
- publicclassProduct{
- privateintprodId;
- privateStringprodName;
- privatedoubleprodPrice;
- //setter/getter和构造方法略
- }
Customer/Order/Product,它们之间的关系,依次是一对多、一对多的,为演示目的,分别用了 List 和数组作为聚合属性。
1.JavaBean -> XML
- publicstaticvoidmain(String[]args){
- //构造接近实际的Customer对象
- Productp1=newProduct(1001,"电脑",4000);
- Productp2=newProduct(1002,"空调",2000);
- Product[]prods1=newProduct[]{p1,p2};
- Orderorder1=newOrder(101,"电器类",prods1);
- List<Order>orders=newArrayList<Order>();
- orders.add(order1);
- Customercustomer=newCustomer(1,"Unmi",orders);
- //XStreamxstream=newXStream();
- XStreamxstream=newXStream(newDomDriver());
- Stringxml=xstream.toXML(customer);//转换成xml格式
- System.out.println(xml);//输出xml字符串
- }
代码说明:XStream对象的构造,可无参,或传入某一DomDriver实例,如XppDomDriver、JDomDriver、Dom4JDriver,它们的用途我想不必多说,注意要引入相应的jar包,无参或DomDriver则是用JDK默认的解析XML的实现。
toXML()还有两个重载方法,分别是:toXML(Objectobj,OutputStreamout)和toXML(Objectobj,Writerout),可用于自定义输出目的地。
来看看上面程序的输出:
- <com.unmi.model.Customer>
- <custId>1</custId>
- <custName>Unmi</custName>
- <orders>
- <com.unmi.model.Order>
- <orderId>101</orderId>
- <orderName>电器类</orderName>
- <products>
- <com.unmi.model.Product>
- <prodId>1001</prodId>
- <prodName>电脑</prodName>
- <prodPrice>4000.0</prodPrice>
- </com.unmi.model.Product>
- <com.unmi.model.Product>
- <prodId>1002</prodId>
- <prodName>空调</prodName>
- <prodPrice>2000.0</prodPrice>
- </com.unmi.model.Product>
- </products>
- </com.unmi.model.Order>
- </orders>
- </com.unmi.model.Customer>
应该发现了,节点名用了类的全限名,有些难看,不过我们可以用别名来解决,只要在toXML()之前加上三行代码:
- xstream.alias("customer",Customer.class);
- xstream.alias("order",Order.class);
- xstream.alias("product",Product.class);
执行,再来看看生成的XML内容,漂亮多了吧:
- <customer>
- <custId>1</custId>
- <custName>Unmi</custName>
- <orders>
- <order>
- <orderId>101</orderId>
- <orderName>电器类</orderName>
- <products>
- <product>
- <prodId>1001</prodId>
- <prodName>电脑</prodName>
- <prodPrice>4000.0</prodPrice>
- </product>
- <product>
- <prodId>1002</prodId>
- <prodName>空调</prodName>
- <prodPrice>2000.0</prodPrice>
- </product>
- </products>
- </order>
- </orders>
- </customer>
2.JavaBean->JSON
前面main()方法中构造好Customer对象后的代码换成如下:
- XStreamxstream=newXStream(newJsonHierarchicalStreamDriver());
- xstream.alias("customer",Customer.class);
- xstream.alias("order",Order.class);
- xstream.alias("product",Product.class);
- xstream.toXML(customer,newPrintWriter(System.out));
代码说明:这里对于XStream实例只是构造时换成了JsonHierarchicalStreamDriver实例,也可以用JettisonMappedXmlDriver(需要引入jettison-1.x.x.jar包)。别名机制与前面的情况是一样的。仍然用toXML()方法,没有toJSON()方法,统一了接口方法以,用起来却让人有些费解。
看输出:
- {"customer":{
- "custId":1,
- "custName":"Unmi",
- "orders":[
- {
- "orderId":101,
- "orderName":"电器类",
- "products":[
- {
- "prodId":1001,
- "prodName":"电脑",
- "prodPrice":4000.0
- },
- {
- "prodId":1002,
- "prodName":"空调",
- "prodPrice":2000.0
- }
- ]
- }
- ]
- }
- }
如果使用的是JettisonMappedXmlDriver,你会看到输出的内容全在一行。
前面用于演示JavaBean到XML和JSON的转换的例子,还稍显复杂,涉及到了List和数组类型。其实XStream是通过反射来获取属性的,即使是私有的,而不依赖于getter方法,这点上比JSON-lib要强。XStream使用了像JDBCDriver的模式,通过更换Driver的方式来达成不同的内部实现。和DWR/Struts一样,它也是用Converter来做到数据类型的转换。
以上介绍JavaBean到XML和JSON的转换,JavaBean未涉及到关联关系。复杂的XStream也做得到,就看前两个例子,XStream能够把复杂的JavaBean生成XML和JSON,它也有这个能耐把生成的东西还原回去的。而且XStream在由XML和JSON生成JavaBean时不依赖于setter方法和构造方法的。
我们在实际中使用XStream时应该还会对它进行细究,或作进一步的扩展,如把某个JavaBean属性生成XML时作为另一属性生成的XML节点的属性,而不是子节点;或加入自己的Converter、甚至是自己的DomDriver、JsonDriver等等。
相关推荐
XStream示例代码,JavaBean与XML,JSON之间互相转换(包含完整jar包)jettison-1.3.3.jar、xmlpull-1.1.3.1.jar、xstream-1.4.7.jar
NULL 博文链接:https://kingxss.iteye.com/blog/1037741
xml与json、javabean的互相转换
一个小demo展示xml的两种解析方式和四种解析方法,以及使用XStream进行javaBean与xml、json之间的转换
javaBean 与 xml 互转,提供工具类。只需要把需要转换的类放入,就可以。使用。
通过fastjson实现了JavaBean,list<JavaBean>,MAP,list等格式与json格式之间的转换,已经附带fastjson的包,包的版本为fastjson-1.1.36.jar
操作json最快的jar包,可以自由转换javabean和json和xml等。
XStream示例代码,JavaBean与XML,JSON之间互相转换(包含完整jar包)jettison-1.3.3.jar、xmlpull-1.1.3.1.jar、xstream-1.4.7.jar
XStream示例,JavaBean与XML,JSON之间互相转换(含jar包) jettison-1.3.3.jar、xmlpull-1.1.3.1.jar、xstream-1.4.7.jar
xstream-1.4.2.jar,xpp3_min-1.1.4.jar,xmlpull-1.1.3.1.jar 包括 //XML --> JavaBean, //XML --> JavaBean //JavaBean --> JSON,//JSON--> JavaBean
更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆表。 ...
在SpringMVC中使用JSON需要引入...转化json格式数据成为javabean对象 2.commons-beanutils-1.7.0.jar 3.commons-collections-3.2.jar 4.commons-lang-2.3.jar 5.commons-logging-1.0.4.jar 6.ezmorph-1.0.4.jar
所以在读取大型xml时可以把 xstream与saxparser结合起来使用,用saxparser读取整个xml把核心数据部分让xstrea m来解析成javabean,这样既解决了大数据的问题又利用了xstream快速转化javabean的 优点。 为了利于多...
2、新增按字段生成文件,支持把字段、JSON、XML数据转换成任何代码 3、新增大量新的自定义模板,如:DDL、随机数据、导出数据、数据模型、Ant Design Vue的CRUD模板等 4、新增更多用于自定义模板生的内置静态对象 5...
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...
完美转换豆瓣API所使用的GData/Atom类型的xml以及json致简单易读易懂易用的JavaBean '豆瓣社区/书影音/豆瓣说'全覆盖 - 全面支持豆瓣开放了的API 几乎支持全部豆瓣开放平台中开放了的API 错误处理 - 轻松了解为何...
第二部分 核心概念:动作、拦截器和类型转换 第3章 使用Struts 2动作 36 3.1 Struts 2动作简介 36 3.2 打包动作 39 3.2.1 Struts 2公文包示例应用程序 39 3.2.2 组织你的包 39 3.2.3 使用struts-default包中的组件 ...
RedAnt项目 ...结果渲染:支持对结果进行渲染,支持html,xml,plain,json格式 Cookie管理:内置一个Cookie管理器 初步后置拦截器:支持初步拦截器与后置拦截器 单机模式:支持单机模式 发挥模式:支持发挥
快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean的过程。 使用方法:快捷键Alt+S也可以使用Alt+Insert选择GsonFormat 2.Android ButterKnife Zelezny 配合ButterKnife实现注解,...
1.5.4 通用类型转换系统和属性格式化系统 1.5.5 数据访问层新增OXM功能 1.5.6 Web层的增强 1.5.7 其他 1.6 Spring对Java版本的要求 1.7 如何获取Spring 1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello ...