Java常见应用(二):Json

持续输出学习 持续发光 共同进步!

什么是Json

官网定义:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。

Json 格式:

形如{key:value}键值对格式的数据,一般key为字符串。

jdk不提供json支持,需从Json 官网下载Json所依赖的jar包才能解析Json格式。
Json-Java

下载的Json-Java为zip包,里面为.java文件,不能直接引用,我们一般引用的都是经编译过后的.class文件。需打包为jar后方可使用。使用eclipse的Export 到处导出为JAR file即可。
在这里插入图片描述
打包之后结果:

在这里插入图片描述

Json的应用

Map对象转Json

JSONObject 的new JSONObject()方法

在这里插入图片描述输出结果:
在这里插入图片描述

普通对象转Json

在这里插入图片描述输出结果:
在这里插入图片描述

字符串转Json

在这里插入图片描述
输出结果:
在这里插入图片描述

文件转Json

per.json文件内容
在这里插入图片描述

先将.json文件读取后用字符串存储,再将该字符串转Json

在这里插入图片描述
输出结果:

在这里插入图片描述

使用commons-io.jar 封装好的方法将文件转为字符串 省去了自己手写读取文件将文件转为字符串。
在这里插入图片描述

生成json文件

json对象.write()

Writer为抽象类,需使用其子类
在这里插入图片描述

在这里插入图片描述

注意:

在这里插入图片描述若不使用w.flush() ,p.json文件为空。

总结

Map、JavaBean对象、字符串格式json数据转Json
使用:JSONObject json = new JSONObject(Map/JavaBean对象/字符串格式json);

String格式的json数组转json数组

JSONArray jsonArray = new JSONArray(String格式的json数组);
在这里插入图片描述
结果:
在这里插入图片描述

使用json.jar 不能将Map转为JSONArray,需借助功能更为强大的Json-lib
JSON-lib官网

【官方描述】

JSON-lib is a java library for transforming beans, maps, collections, java arrays and XML to JSON and back again to beans and DynaBeans.

可以看到JSON-lib支持beans, maps, collections, java arrays 和XML 转为 JSON。
Json-lib至少包括一下jar包,都可以在maven仓库找到对应的版本的jar包:
在这里插入图片描述
【官方描述】

Json-lib comes in two flavors, depending on the jdk compatibility. json-lib-x.x-jdk13 is compatible with JDK 1.3.1 and upwards. json-lib-x.x-jdk15 is compatible with JDK 1.5, includes support for Enums in JSONArray and JSONObject.

Json-lib有两种风格,依赖于jdk的兼容性。x-jdk13兼容JDK 1.3.1及以上版本。json-lib-x。x-jdk15兼容JDK 1.5。因此除了上述5个包,还需要用到 json-lib-x.x-jdk13 (根据你的jdk版本选择json-lib-x.x-jdk13还是json-lib-x.x-jdk15 )。

在这里插入图片描述

结果:
在这里插入图片描述

将JSONArray 转Map对象

在这里插入图片描述
结果:
在这里插入图片描述总结:
json-lib包比json.jar功能更加强大。使用json-lib的JSONObject只需:
net.sf.json.JSONObject jsonObject =new net.sf.json.JSONObject();
jsonObject= jsonObject.fromObject(字符串/map/JavaBean);
就可以将字符串/map/JavaBean转为Json对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
因为JDK1.3/1.4不支持泛型,所以写法比支持对象嵌套的要复杂,附件是自己研究的一个例子 /* ===========================JSON字符串转换为Java Object===============================*/ String sibill = ""; sibill = "{\"blno\":\"123\",\"cutofftime\":\"2011-1-12\",\"vsl\":\"vsl\",\"voy\":\"voy\",\"port\":\"port\",\"consigneename\":\"consigneename\",\"consigneeaddress\":\"consigneeaddress\",\"consigneecityc\":\"consigneecitycountry\","+ "\"cntr\":[{\"cntrno\":\"111111\",\"cl\":\"拼箱\",\"sealnum\":\"sealnum1\",\"size\":\"40\",\"box\":\"H1\",\"cgo\":[{\"cgonum\":\"cgonum11\",\"cgoweight\":\"cgoweight1\",\"cgosize\":\"cgosize1\",\"cgohscode\":\"cgohscode1\",\"cgoowner\":\"cgoowner1\"}]},"+ "{\"cntrno\":\"222222\",\"cl\":\"整箱\",\"sealnum\":\"sealnum2\",\"size\":\"48\",\"box\":\"G1\",\"cgo\":[{\"cgonum\":\"cgonum21\",\"cgoweight\":\"cgoweight1\",\"cgosize\":\"cgosize1\",\"cgohscode\":\"cgohscode1\",\"cgoowner\":\"cgoowner1\"},{\"cgonum\":\"cgonum22\",\"cgoweight\":\"cgoweight2\",\"cgosize\":\"cgosize2\",\"cgohscode\":\"cgohscode2\",\"cgoowner\":\"cgoowner2\"}]}]"+ "}"; /* 第一步 (直接转换为Java Object) */ SiBillBean sibillbean = (SiBillBean)JSONObject.toBean(JSONObject.fromObject(sibill),SiBillBean.class); /* 第布 (取出嵌套对象属性值) */ JSONArray arrCntr = sibillbean.getCntr(); for (int i = 0; i < arrCntr.size(); i++) { JSONObject cntr = (JSONObject)arrCntr.get(i); CntrBean cntrBean = (CntrBean)JSONObject.toBean(cntr,CntrBean.class); System.out.println(cntrBean); JSONArray arrCgo = cntrBean.getCgo(); for (int j = 0; j < arrCgo.size(); j++) { JSONObject cgo = (JSONObject)arrCgo.get(j); CgoBean cgoBean = (CgoBean)JSONObject.toBean(cgo,CgoBean.class); System.out.println(cgoBean); } } /* 第布 end */ /* ===========================Java Object转换为JSON字符串===============================*/ //CGO 1/2/3 CgoBean cgoBean1 = new CgoBean(); cgoBean1.setCgonum("cgo11"); CgoBean cgoBean2 = new CgoBean(); cgoBean2.setCgonum("cgo21"); CgoBean cgoBean3 = new CgoBean(); cgoBean3.setCgonum("cgo22"); //CNTR1 CntrBean cntrBean1 = new CntrBean(); cntrBean1.setCntrno("cntr1"); JSONArray jsonArrayCntr1 = new JSONArray(); jsonArrayCntr1.add(0, cgoBean1); cntrBean1.setCgo(jsonArrayCntr1); //CNTR2 CntrBean cntrBean2 = new CntrBean(); cntrBean2.setCntrno("cntr2"); JSONArray jsonArrayCntr2 = new JSONArray(); jsonArrayCntr2.add(0, cgoBean2); jsonArrayCntr2.add(1, cgoBean3); cntrBean2.setCgo(jsonArrayCntr2); //SIBILL SiBillBean sibillb = new SiBillBean(); sibillb.setBlno("COSU 123456789"); JSONArray jsonArraySiBill = new JSONArray(); jsonArraySiBill.add(0, cntrBean1); jsonArraySiBill.add(1, cntrBean2); sibillb.setCntr(jsonArraySiBill); System.out.println(JSONObject.fromObject(sibillb));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值