Open liujiusheng opened 2 years ago
JAVA里面处理json数据是个麻烦事,听说这个体系下最好的是fastjson这个包,所以学习一下。
经研究,fastjson在JAVA体系下确实是个好东西,但是官方文档只侧重于说明自己有多强多稳定,没有写它的各种方法具体是干嘛的,所以我打算自己写一个。
官方地址:https://github.com/alibaba/fastjson
之所以写这个文档,是因为官方文档写得太简单了,让我这个新手完全没办法上手,甚至摸不着头脑。
要使用fastjson就需要了解JAVA的基础数据类型,Map和List。
getJSONArray取到的值是个List。
getJSONObject取到的值是个Map。
Map有keySet()方法可以获取所有的key值。
List有size()方法可以获取数组的长度,从而进行循环。
put,replace方法用于getJSONObject,都可用于根据key设置Map的值,使用put时,若原对象中无对应的key则会直接添加,replace则只用于替换指定key的值。
add,set方法用于getJSONArray,add会添加一个数据到List中,会立即影响size()函数,导致形成死循环。set则是根据key设置指定某一个数据的值,不会增加size。
可以直接链式操作,操作结果会直接应用于原对象,如下可直接将vo内的type值替换为raster: vo.getJSONObject("sources").getJSONObject("QFQKG_2050-1612592151374").put("type","raster");
vo.getJSONObject("sources").getJSONObject("QFQKG_2050-1612592151374").put("type","raster");
通过maven引入,在pom.xml文件的部分添加如下代码:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency>
类引入:
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject;
String data = "{\"version\":8,\"center\":[106.80710100305896,30.544353204744795],\"zoom\":10.981380190495063,\"bearing\":0,\"pitch\":0,\"sources\":{\"QFQKG_2050-1612592151374\":{\"type\":\"vector\",\"tiles\":[\"http://192.168.1.125:9303/api-geo/geoServices/mvt?_current_system_key_=guangan&layer=QFQKG_2050&layerId=1356072625352347648&version=1612592151374&z={z}&x={x}&y={y}¶m=YDDM\"]}},\"layers\":[{\"id\":\"QFQKG_2050-1612318382766-39b9086d-a1ca-4b6b-8753-5fb9329188e6\",\"type\":\"fill\",\"source\":\"QFQKG_2050-1612592151374\",\"source-layer\":\"QFQKG_2050\",\"layout\":{\"visibility\":\"visible\"},\"paint\":{\"fill-color\":[\"match\",[\"get\",\"YDDM\"],[\"R\",\"R1\",\"R11\",\"R12\",\"R2\",\"R21\",\"R22\",\"R221\",\"R222\",\"R223\",\"R24\",\"R2A1\",\"R2A2\",\"R2A3\",\"R2E1\",\"R2G1\",\"R2G2\",\"R2H4\",\"R2R1\",\"R3\",\"RA\"],\"rgba(255,255,51,1)\",[\"MB\"],\"rgba(255,132,61,1)\",[\"E9\"],\"#000000\",[\"EL\",\"E1\",\"E11\"],\"rgba(0,255,255,1)\",[\"E\",\"E2\"],\"rgba(95,153,76,1)\",[\"H12\",\"H1\",\"H14\",\"H\",\"H6\",\"H9\"],\"rgba(182,203,252,1)\",[\"H4\",\"H41\",\"H42\"],\"rgba(97,128,0,1)\",[\"H5\"],\"rgba(153,77,0,1)\",[\"H3\"],\"rgba(255,127,127,1)\",[\"G1\",\"G1/E\",\"G1/S42\",\"G11\",\"G11S19\",\"G12\",\"G12C26\",\"G12S19\"],\"rgba(0,255,0,1)\",[\"U\",\"U1\"],\"rgba(51,179,255,1)\",[\"H2\"],\"rgba(173,173,173,1)\",[\"S\",\"S1\"],\"rgba(214,214,214,1)\",[\"W\",\"W/M\"],\"rgba(191,127,225,1)\",[\"M\",\"M1\",\"M1/W1\"],\"rgba(153,115,77,1)\",[\"B\",\"B1\"],\"rgba(255,0,0,1)\",[\"A\",\"A/R\"],\"rgba(255,128,255,1)\",[\"B1+R2\",\"B1/R2\"],\"rgba(255,159,127,1)\",\"#000000\"],\"fill-outline-color\":\"rgba(74,52,249,1)\"},\"metadata\":{\"columns\":[{\"name\":\"YDDM\",\"alias\":\"YDDM\"}]}}]}"; JSONObject vo = JSON.parseObject(data); //反序列化 System.out.println(vo.get("version")); vo.put("version",9); // vo.replace("version",9); System.out.println(vo.get("version")); System.out.println(vo.getString("center")); System.out.println(vo.getJSONArray("center").get(0)); System.out.println(vo.getJSONObject("sources").getJSONObject("QFQKG_2050-1612592151374").getString("type")); vo.getJSONObject("sources").getJSONObject("QFQKG_2050-1612592151374").put("type","raster"); System.out.println(vo.getJSONObject("sources").getJSONObject("QFQKG_2050-1612592151374").getString("type")); JSONObject sources = vo.getJSONObject("sources"); System.out.println(sources); System.out.println("直接在原对象上替换"); for(String key:sources.keySet()){ System.out.println(key); System.out.println(sources.get(key).toString()); System.out.println(vo.getJSONObject("sources").getJSONObject(key).getJSONArray("tiles").size()); for(int i=0;i<vo.getJSONObject("sources").getJSONObject(key).getJSONArray("tiles").size();i++){ System.out.println(i); System.out.println(vo.getJSONObject("sources").getJSONObject(key).getJSONArray("tiles").getString(i)); String result = vo.getJSONObject("sources").getJSONObject(key).getJSONArray("tiles").getString(i).replace("192.168.1.125","127.0.0.1"); vo.getJSONObject("sources").getJSONObject(key).getJSONArray("tiles").set(i,result); System.out.println(vo.getJSONObject("sources").getJSONObject(key).getJSONArray("tiles").getString(i)); } } System.out.println(vo);
函数主要是Map和List的一些函数。
JSON.parseObject
JSON.toJSONString
JSON.parse
JSON.addMixInAnnotations
JSON.clearMixInAnnotations
JSON.parseArray
JSON.removeMixInAnnotations
JSON.setDefaultTypeKey
getJSONObject:获取json对象中的对象
getJSONArray:获取json对象中的数组
JAVA里面处理json数据是个麻烦事,听说这个体系下最好的是fastjson这个包,所以学习一下。
经研究,fastjson在JAVA体系下确实是个好东西,但是官方文档只侧重于说明自己有多强多稳定,没有写它的各种方法具体是干嘛的,所以我打算自己写一个。
官方地址:https://github.com/alibaba/fastjson
之所以写这个文档,是因为官方文档写得太简单了,让我这个新手完全没办法上手,甚至摸不着头脑。
要使用fastjson就需要了解JAVA的基础数据类型,Map和List。
getJSONArray取到的值是个List。
getJSONObject取到的值是个Map。
Map有keySet()方法可以获取所有的key值。
List有size()方法可以获取数组的长度,从而进行循环。
put,replace方法用于getJSONObject,都可用于根据key设置Map的值,使用put时,若原对象中无对应的key则会直接添加,replace则只用于替换指定key的值。
add,set方法用于getJSONArray,add会添加一个数据到List中,会立即影响size()函数,导致形成死循环。set则是根据key设置指定某一个数据的值,不会增加size。
可以直接链式操作,操作结果会直接应用于原对象,如下可直接将vo内的type值替换为raster:
vo.getJSONObject("sources").getJSONObject("QFQKG_2050-1612592151374").put("type","raster");
使用说明
引入
通过maven引入,在pom.xml文件的部分添加如下代码:
类引入:
使用示例
函数
函数主要是Map和List的一些函数。
JSON
JSON.parseObject
JSON.toJSONString
JSON.parse
JSON.addMixInAnnotations
JSON.clearMixInAnnotations
JSON.parseArray
JSON.removeMixInAnnotations
JSON.setDefaultTypeKey
getJSONObject
getJSONObject:获取json对象中的对象
getJSONArray
getJSONArray:获取json对象中的数组