JavaBean到XML和JSON的转换

XStream示例(包含完整jar包) XStream示例代码,JavaBean与XML,JSON之间互相转换(包含完整jar包)jettison-1.3.3.jar、xmlpull-1.1.3.1.jar、xstream-1.4.7.jar 立即下载


  • 本文介绍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包中):

    1. public class Customer {  
    2. private int custId;  
    3. private String custName;  
    4. private List<Order> orders;  
    5. //setter/getter 和构造方法略  
    6. }  
    7.  
    8. public class Order {  
    9. private int orderId;  
    10. private String orderName;  
    11. private Product[] products;  
    12. //setter/getter 和构造方法略  
    13. }  
    14.  
    15. public class Product {  
    16. private int prodId;  
    17. private String prodName;  
    18. private double prodPrice;  
    19. //setter/getter 和构造方法略  
    20. } 

    Customer/Order/Product,它们之间的关系,依次是一对多、一对多的,为演示目的,分别用了 List 和数组作为聚合属性。

    1.JavaBean -> XML

    1. public static void main(String[] args) {  
    2.  
    3. //构造接近实际的 Customer 对象  
    4. Product p1 = new Product(1001,"电脑",4000);  
    5. Product p2 = new Product(1002,"空调",2000);  
    6. Product[] prods1 = new Product[]{p1,p2};  
    7.  
    8. Order order1 = new Order(101,"电器类",prods1);  
    9.  
    10. List<Order> orders = new ArrayList<Order>();  
    11. orders.add(order1);  
    12. Customer customer = new Customer(1,"Unmi",orders);  
    13.  
    14. //XStream xstream = new XStream();  
    15. XStream xstream = new XStream(new DomDriver());  
    16.  
    17. String xml = xstream.toXML(customer);//转换成 xml 格式  
    18.  
    19. System.out.println(xml); //输出 xml 字符串  
    20. } 

    代码说明:XStream对象的构造,可无参,或传入某一DomDriver实例,如XppDomDriver、JDomDriver、Dom4JDriver,它们的用途我想不必多说,注意要引入相应的jar包,无参或DomDriver则是用JDK默认的解析XML的实现。

    toXML()还有两个重载方法,分别是:toXML(Objectobj,OutputStreamout)和toXML(Objectobj,Writerout),可用于自定义输出目的地。

    来看看上面程序的输出:

    1. <com.unmi.model.Customer> 
    2. <custId>1</custId> 
    3. <custName>Unmi</custName> 
    4. <orders> 
    5. <com.unmi.model.Order> 
    6. <orderId>101</orderId> 
    7. <orderName>电器类</orderName> 
    8. <products> 
    9. <com.unmi.model.Product> 
    10. <prodId>1001</prodId> 
    11. <prodName>电脑</prodName> 
    12. <prodPrice>4000.0</prodPrice> 
    13. </com.unmi.model.Product> 
    14. <com.unmi.model.Product> 
    15. <prodId>1002</prodId> 
    16. <prodName>空调</prodName> 
    17. <prodPrice>2000.0</prodPrice> 
    18. </com.unmi.model.Product> 
    19. </products> 
    20. </com.unmi.model.Order> 
    21. </orders> 
    22. </com.unmi.model.Customer> 

    应该发现了,节点名用了类的全限名,有些难看,不过我们可以用别名来解决,只要在toXML()之前加上三行代码:

    1. xstream.alias("customer", Customer.class);  
    2. xstream.alias("order", Order.class);  
    3. xstream.alias("product", Product.class); 

    执行,再来看看生成的XML内容,漂亮多了吧:

    1. <customer> 
    2. <custId>1</custId> 
    3. <custName>Unmi</custName> 
    4. <orders> 
    5. <order> 
    6. <orderId>101</orderId> 
    7. <orderName>电器类</orderName> 
    8. <products> 
    9. <product> 
    10. <prodId>1001</prodId> 
    11. <prodName>电脑</prodName> 
    12. <prodPrice>4000.0</prodPrice> 
    13. </product> 
    14. <product> 
    15. <prodId>1002</prodId> 
    16. <prodName>空调</prodName> 
    17. <prodPrice>2000.0</prodPrice> 
    18. </product> 
    19. </products> 
    20. </order> 
    21. </orders> 
    22. </customer> 

    2.JavaBean->JSON

    前面main()方法中构造好Customer对象后的代码换成如下:

    1. XStream xstream = new XStream(new JsonHierarchicalStreamDriver());  
    2. xstream.alias("customer", Customer.class);  
    3. xstream.alias("order", Order.class);  
    4. xstream.alias("product", Product.class);  
    5. xstream.toXML(customer, new PrintWriter(System.out)); 

    代码说明:这里对于XStream实例只是构造时换成了JsonHierarchicalStreamDriver实例,也可以用JettisonMappedXmlDriver(需要引入jettison-1.x.x.jar包)。别名机制与前面的情况是一样的。仍然用toXML()方法,没有toJSON()方法,统一了接口方法以,用起来却让人有些费解。

    看输出:

    1. {"customer": {  
    2. "custId": 1,  
    3. "custName": "Unmi",  
    4. "orders": [  
    5. {  
    6. "orderId": 101,  
    7. "orderName": "电器类",  
    8. "products": [  
    9. {  
    10. "prodId": 1001,  
    11. "prodName": "电脑",  
    12. "prodPrice": 4000.0  
    13. },  
    14. {  
    15. "prodId": 1002,  
    16. "prodName": "空调",  
    17. "prodPrice": 2000.0  
    18. }  
    19. ]  
    20. }  
    21. ]  
    22. }  
    23. } 

    如果使用的是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完整jar XStream完整jar,里面包含了XStream完整jar,以及一个简单实例 立即下载

相关推荐

xStream完整Jar包

本来想0分上传的,但是最低是1,这是测试没有报错的完整jar包

JavaBean到XML和JSON的转换 附件中有xtream.1.3.1.jar包

XML和JSON是当今常用的两种数据描述与传输的格式,特别是涉及到JS时使用JSON颇为频繁。自然,在Java的世界里少不了完成JavaBean与这两种格式相互转换的组件,那就是XStream和JSON-lib。这里我简单记下XStream的用法。其实相类似的工具早已有之。如果用过DWR的同志,一定有印像,DWR进行远程方法调用时也能为你完成JavaBean和JSON格式的双向转换的,所依赖的是它...

huiqinbo的专栏 242

xstream-1.4.15.jar

XStream 反序列化漏洞(CVE-2020-26258 & 26259),修复jar包 xstream-1.4.15.jar Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发。 0x01 漏洞描述 Xstream上次对CVE-2020-26217处理并不彻底,虽然通过黑名单方法阻止了远程代码执行,但是仍然可以采用类似思路实现文件删除与服务器请求伪造。 影响版本 Xstream = 1.4.15 风险等级 严重

Xtream 使用

xtream使用

BlackEn ▪ Lee 1836

XStream示例(含jar包)

XStream示例,JavaBean与XML,JSON之间互相转换(含jar包) jettison-1.3.3.jar、xmlpull-1.1.3.1.jar、xstream-1.4.7.jar

OpenClaw 接入智谱 GLM-5-Turbo 龙虾套餐:完整避坑指南与 SOP

OpenClaw 接入智谱 GLM-5-Turbo 的核心在于“端点匹配”和“多渠道验证”。端点匹配:龙虾套餐必须用标准端点。多渠道验证:遇到 TUI 不显示时,用curl或飞书机器人验证,不要被 Bug 误导。希望这份 SOP 能帮你顺利跑通 OpenClaw + GLM-5-Turbo,享受强大的 AI 编程助手!

Aaron_liu20的博客 1702

java xstream jar_xstream-1.3.1

xstream-1.3.1/com/thoughtworks/xstream/alias/CannotResolveClassException.classxstream-1.3.1/com/thoughtworks/xstream/alias/ClassMapper$Null.classxstream-1.3.1/com/thoughtworks/xstream/alias/ClassMappe...

weixin_36472962的博客 298

Sharding Sphere JDBC使用Mybatis的saveBatch无法返回主键的问题

Sharding Sphere JDBC使用Mybatis的saveBatch无法返回主键的问题

HHCS231的博客 1829

XStream完美转换XML、JSON

1、 下载jar包、及官方资源 xStream的jar下载地址: https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/xstream-distribution/1.3.1/xstream-distribution-1.3.1-bin.zip 官方的示例很全,官方参考示例:h

query_1的专栏 1718

SAP Business One自定义表与字段实战:从零构建企业专属数据模型

本文详细介绍了如何在SAP Business One中创建自定义表与字段,从零构建企业专属数据模型。通过实战案例和避坑指南,帮助用户掌握业务适配、流程优化和权限隔离等关键技巧,提升系统灵活性和数据管理效率。特别适合需要扩展标准功能的SAP Business One用户。

weixin_28730927的博客 361

仅使用 Python 创建的 Web 应用程序(前端版本)第03章Streamlit-多页面

接下来,我们将解释多页面切换。Streamlit 没有“多页面”或“页面路由”等功能。另一方面,通过根据用户动作切换要执行的功能,可以使其看起来好像存在“多个页面”。注意:我认为它类似于 SinglePageApplication (SPA)。然而,根据 React、Vue 等中使用的 URL 路径来更改页面的路由很困难。还有一个用于获取查询参数的实验性 API,但如果您确实需要这种功能,我认为认真尝试编写 React 或 Vue 是个好主意。我们来看一个通过按下按钮来切换页面的示例,如下所示。

xianyinsuifeng的博客 1328

java中xstream jar包下载_xstream-1.3.1.jar.zip jar包

xstream-1.3.1.jar.zip jar包java代码类jar包,总共200多个,下载后可当jar类库备用为什么使用jar包安全,可以对其进行数字签名,只让能够识别数字签名的用户使用里面的东西。加快下载速度;压缩,使文件变小,与ZIP压缩机制完全相同。包封装。能够让JAR包里面的文件依赖于统一版本的类文件。可移植性,能够在各种平台上直接使用。把一个JAR文件添加到系统的classpath...

weixin_42121725的博客 1139

BME688传感器原理图设计,已量产(环境传感器)

在便携式空气质量监测、可穿戴健康设备这类低功耗场景中,BME688 这类集成了 VOC、温湿度、气压的四合一 MEMS 传感器越来越受欢迎 —— 它体积小、功耗低,刚好匹配便携设备的需求。但这类小信号传感器对电源噪声、电平匹配的要求很细,今天结合实际项目里的一款 BME688 接口电路,聊聊硬件设计的关键细节。

不脱发的程序猿 514

XML JSON JavaBean相互转换

程序员小白初入优快云多多关照目的做的一些工作环境XML与JSONXML2JSONJSON2XMLXML与JavaBeanJavaBeanXML2JavaBeanJavaBean2XML通过JAXB实现转换使用XStream转单个Bean使用XStream转List BeanJavaBean与JSONJavaBean2JSONJSON2JavaBean结语 目的 其实吧就是刚开始实习,老师傅让我接...

Keenang的博客 879

在轻量化与精度之间取得平衡:YOLOv8 + GhostNet 的设计与实验分析

摘要: GhostNet系列(GhostNet、GhostNetv2、GhostNeXt)通过“幽灵特征图”技术,以极低计算量生成丰富特征,为YOLOv8提供轻量化改造方案。该技术能在减少参数量与计算量的同时保持或提升检测精度,适用于边缘设备部署。实现时需替换YOLOv8的Backbone为GhostNet模块,并通过消融实验验证其有效性。实验数据表明,改造后的模型在参数量降低30%的同时,推理速度提升28.6%,mAP@0.5最高提升1.9个百分点,平衡了轻量化与精度,为毕设提供技术创新性与工程落地性的双

m0_64661770的博客 194

AI大模型助力现金流精准预测案例详解

因为它的“注意力机制”能像“人一样思考”——比如,当预测“下周现金流”时,模型会重点关注“最近7天的销售数据”“未来7天的天气”“竞品是否有促销”这些关键因素,而忽略“去年同期的无关数据”。AI大模型不是“取代”财务人员,而是“赋能”他们——把财务人员从“重复的Excel操作”中解放出来,专注于“战略决策”(比如如何优化资金结构、如何提升资金利用率)。比如,“促销力度”这个特征,不是简单的“折扣率”,而是“折扣率×促销天数×覆盖SKU数量”,这样能更准确反映促销对现金流的影响。这些问题的核心,其实是。

AIGC应用创新大全的博客 1258

JavaBean、JSON、XML的相互转换,JSON-lib(2.4)

1. package com.huey.dream.utils; import java.util.Arrays; import java.util.List; import org.apache.commons.lang.WordUtils; import net.sf.json.JSON; import net.sf.json.JSONArray; import net.sf.json

huey2672的专栏 1100

Zephyr内核——内存管理——内存堆

Zephyr提供了一组允许线程动态分配内存。

wayne2018的博客-心情驿站 771

java中xml json javabean之间的转换

问题背景,需要将XML格式的报文转换为JSON格式 遇到的问题: 1、后台接受到前台的json格式的字符串怎么处理? public static void jsonToJAVA() { System.out.println("json字符串转java代码"); String jsonStr = "{\"password\":\"123456\",\"username\":\"张三\"}"

leafy的博客 742

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

使用 XStream 在 JavaBean 与 XML/JSON 之间相互转换

XML 和 JSON 是当今常用的两种数据描述与传输的格式,特别是涉及到 JS 时使用 JSON 颇为频繁。自然,在 Java  的世界里少不了完成 JavaBean 与这两种格式相互转换的组件,那就是 XStream 和 JSON-lib。这里我简单记下 XStream  的用法。 其实相类似的工具早已有之。如果用过 DWR 的同志,一定有印像,DWR 进行远程方法调用时也能为你完成 Jav...

ReeBoo 116

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

使用jackson 进行 xml、javaBean、json之间相互转换

一、pom依赖 <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> &lt...

li_tiantian的博客 1046

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

XStream在JavaBean与XML/JSON 之间相互转换

原址:http://kingxss.iteye.com/blog/1037741 1.XStream:http://xstream.codehaus.org/  2.API:http://xstream.codehaus.org/javadoc/index.html       XML 和 JSON 是当今常用的两种数据描述与传输的格式,特别是涉及到 JS 时使用 JSON

luckypeng的专栏 2257

java xstream xml转json,使用 XStream实现JavaBean 与 XML/JSON 之间相互转换

XML 和 JSON 是当今常用的两种数据描述与传输的格式,特别是涉及到 JS 时使用 JSON 颇为频繁。自然,在 Java 的世界里少不了完成 JavaBean 与这两种格式相互转换的组件,那就是 XStream 和 JSON-lib。这里我简单记下 XStream 的用法。其实相类似的工具早已有之。如果用过 DWR 的同志,一定有印像,DWR 进行远程方法调用时也能为你完成 JavaBe...

weixin_28752627的博客 290

使用 XStream实现JavaBean 与 XML/JSON 之间相互转换

XML 和 JSON 是当今常用的两种数据描述与传输的格式,特别是涉及到 JS 时使用 JSON 颇为频繁。自然,在 Java  的世界里少不了完成 JavaBean 与这两种格式相互转换的组件,那就是 XStream 和 JSON-lib。这里我简单记下 XStream  的用法。其实相类似的工具早已有之。如果用过 DWR 的同志,一定有印像,DWR 进行远程方法调用时也能为你完成 JavaBe

黄瓜和土豆的专栏 1201
上一篇: log4j.properties配置相关(3)
下一篇: win7系统下硬盘安装CentOS5.5
frinder
博客等级 码龄16年 172粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值