开发工具与关键技术: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);