Java-JSON与封装类、序列的相互转换

开发工具与关键技术:Java/MyEclipse 10
作者:张俊辉
撰写时间:2019年07月18日

本文需要使用json_lib的6个jar包分别是: commons-beanutils-1.9.2.jar、p commons-collections-3.2.1.jar、commons-lang-2.4.jar、commons-logging-1.1.1.jar、ezmorph-1.0.6.jar、json-lib-2.4-jdk15.jar。

由于jsp页面与servlet交互中传输的数据为字符串或文件类型,文件类型暂且不提,但字符串类型在java中或数据库中是不足的,因此需要转换数据类型,在jsp页面请求servlet方法时,一个个获取值然后一个个转换值,在需要传输的字段多的时候,需要花费大量的时间书写代码,并且不利于维护。而在servlet返回数据到页面时如果使用jsp标签时可以很方便的获取数据,但在JavaScript中由于不能直接返回JavaScript对象,因此需要返回json字符串,再以json字符串转换为json对象。

在页面中把json格式的对象或json格式的数组转换为json字符串,需要使用JSON.stringify(obj);其中obj可以为json格式的数组或对象,转化后的字符串如下:
Json对象字符串:

{“purchaseNumber”:“PO201907130895”,“purchaseContractID”:“2018”,"
auditStatus":“false”,“purchaseDate”:“2019-07-13”,“supplierName”:“茂名有限公司”,“supplierID”:“2123”,“supplierLinkmanID”:“91”,“taxPoint”:“0”,“paymentMethodID”:“1”,“shouldDate”:“2019-07-13”,“currencyID”:“1”,“paymentDate”:“2019-07-13”,
“user ID”:“2”,“amountMoney”:“4000”,“remark”:""},

然后提交到servlet,如下:

var json=JSON.stringify(data.field);
jQuery.post({
	dataType:"json",
	url:"servlet/PurchaseOrdersManServlet"
	,data:"type=UpdatePurchaseContract&json="+json
});

在servlet获取json对象字符串然后转换为封装类,如下:

String json=request.getParameter("json");
JSONObject jsonObject =JSONObject.fromObject(json);
PurchaseContractPo purchaseContractPo=(PurchaseContractPo)JSONObject.toBean(jsonObject,
PurchaseContractPo.class);

转换后的结果如下:
在这里插入图片描述
Json数组字符串:

[{“orderdetailID”:“1003”,“purchaseContractID”:2018,“toPurchaseID
“:“0”,“originalBrand”:“PPA”,“originalMaterial”:“LH001”,“unit”:“个”,“quality”:””,
“productionDate”:“2019-10-10”,“encapsulation”:“直插式”,“packaging”:"",“deliveryT
ime”:“10周”,“describe”:"",“minOrder”:“0”,“amountPurchased”:“1000”,“noTaxPrice”:
“2”,“priceIncludingTax”:“2”,“suggestePrice”:“3”,“subtotalAmount”:“2000”,“remark”:""},{“orderdetailID”:“1004”,“purchaseContractID”:2018,“toPurchaseID”:“0”,“originalBrand”:“PPB”,“originalMaterial”:“LH002”,“unit”:“个”,“quality”:"",“productionD
ate”:“2019-10-10”,“encapsulation”:“直插式”,“packaging”:"",“deliveryTime”:“10周”,“describe”:"",“minOrder”:“0”,“amountPurchased”:“1000”,“noTaxPrice”:“2”,“priceIncludingTax”:“2”,“suggestePrice”:“3”,“subtotalAmount”:“2000”,“remark”:""}]

然后提交到servlet,提交方式可以产考json对象字符串的提交,在servlet获取json数组字符串然后转换为list序列,如下:

String json=request.getParameter("json");
JSONArray jsonArray=JSONArray.fromObject(json);
List<OrderdetailPo> orderdetailPos=(List<OrderdetailPo>)JSONArray.toList(jsonArray, new OrderdetailPo(),new JsonConfig());

在这里插入图片描述
对于返回到jsp页面JavaScript的数据转换为json格式的字符串并输出到jsp页面,对象为JSONObject jsonObject=JSONObject.fromObject(stateJson);序列为JSONArray jsonArray=JSONArray.fromObject(listJson);然后使用.toString()各自转换为字符串即可,在JavaScript中可以使用jQuery直接定义返回格式,如方请求方法的dataType: "json",也可以使用原生的JavaScript转换例如:var data2=JSON.parse(data2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值