liujiusheng / blog

个人博客,blog
19 stars 0 forks source link

FastJSON非官方文档 #216

Open liujiusheng opened 2 years ago

liujiusheng commented 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");

使用说明

引入

通过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}&param=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

JSON.parseObject

JSON.toJSONString

JSON.parse

JSON.addMixInAnnotations

JSON.clearMixInAnnotations

JSON.parseArray

JSON.removeMixInAnnotations

JSON.setDefaultTypeKey

getJSONObject

getJSONObject:获取json对象中的对象

getJSONArray

getJSONArray:获取json对象中的数组