1 測(cè)試環(huán)境
操作系統(tǒng):window 7
CPU:i5-5200U 2.20GHz
內(nèi)存:8GB
運(yùn)行環(huán)境:MyEclipse 2015
JDK:jdk1.8.0_92
2 序列化
2.1 簡(jiǎn)單數(shù)據(jù)序列化
原始數(shù)據(jù):
String name = "abcdefg";
int age = 25;
boolean verified = false;
序列化后:
{"name":"abcdefg","age":25,"verified":false}
2.2 包含數(shù)組數(shù)據(jù)序列化
原始數(shù)據(jù):
String name = "abcdefg";
int age = 25;
boolean verified = false;
封裝后的數(shù)組為:[{"attrName":"attr1","value":"attribute1"},{"attrName":"attr2","value":123}]
序列化后:
{"name":"abcdefg","age":25,"verified":false,"attrArray":[{"attrName":"attr1","value":"attribute1"},{"attrName":"attr2","value":123}]}
2.3 簡(jiǎn)單Json數(shù)據(jù)反序列化
Json數(shù)據(jù):
{"name":"abcdefg","age":25,"verified":false}
2.4 Json數(shù)組數(shù)據(jù)反序列化
Json數(shù)據(jù):
{"name":"abcdefg","age":25,"verified":false,"attrArray":[{"attrName":"attr1","value":"attribute1"},{"attrName":"attr2","value":123}]}
2.5 實(shí)際例子(以獲取設(shè)備屬性信息值的結(jié)果進(jìn)行json轉(zhuǎn)換為例子)
輸入數(shù)據(jù):
String content = "{ \"cursor\" : { \"firstBatch\" : [ { \"_id\" : { \"$oid\" : \"5b20bf92e2237228c4f343e1\"} , \"keyhash\" : \"Bc1zh875nPEQkymQkzW3V6aj208=\" , \"devname\" : \"卷簾門-兩號(hào)\" , \"writetime_devname\" : { \"$date\" : \"2018-06-13T09:51:51.703Z\"} , \"dev_head_protrait\" : \"5b20e2e98bec6dd0bb728ffc.jpg\" , \"writetime_dev_head_protrait\" : { \"$date\" : \"2018-06-13T09:25:03.573Z\"} , \"regist_time\" : { \"$date\" : \"2018-06-13T06:54:10.000Z\"} , \"writetime_regist_time\" : { \"$date\" : \"2018-06-13T06:54:10.917Z\"} , \"expire_time\" : { \"$date\" : \"2018-12-30T06:54:10.000Z\"} , \"writetime_expire_time\" : { \"$date\" : \"2018-06-13T06:54:10.918Z\"} , \"update_autofota\" : \"abcdefg\" , \"writetime_update_autofota\" : { \"$date\" : \"2018-06-26T08:49:06.186Z\"} , \"online\" : 1.0 , \"writetime_online\" : { \"$date\" : \"2018-06-27T05:46:21.491Z\"} , \"address\" : \"對(duì)方\" , \"writetime_address\" : { \"$date\" : \"2018-06-13T09:51:51.704Z\"} , \"wifissid@zot\" : \"zy5g\" , \"writetime_wifissid@zot\" : { \"$date\" : \"2018-06-27T07:24:38.252Z\"} , \"swver@zot\" : \"ZHUYUN_1.4.3\" , \"writetime_swver@zot\" : { \"$date\" : \"2018-06-26T06:30:33.537Z\"} , \"hwver@zot\" : \"ESP8266EX\" , \"writetime_hwver@zot\" : { \"$date\" : \"2018-06-26T06:30:33.123Z\"} , \"fota_update@zot\" : \"bin\" , \"writetime_fota_update@zot\" : { \"$date\" : \"2018-06-15T08:10:41.319Z\"}}] , \"id\" : 0 , \"ns\" : \"zot_device_2_1_1.t1_1_device_info\"} , \"ok\" : 1.0}";
輸出數(shù)據(jù):
String result= "{ \"_id\" : { \"$oid\" : \"5b20bf92e2237228c4f343e1\"} , \"keyhash\" : \"Bc1zh875nPEQkymQkzW3V6aj208=\" , \"devname\" : \"卷簾門-兩號(hào)\" , \"writetime_devname\" : { \"$date\" : \"2018-06-13T09:51:51.703Z\"} , \"dev_head_protrait\" : \"5b20e2e98bec6dd0bb728ffc.jpg\" , \"writetime_dev_head_protrait\" : { \"$date\" : \"2018-06-13T09:25:03.573Z\"} , \"regist_time\" : { \"$date\" : \"2018-06-13T06:54:10.000Z\"} , \"writetime_regist_time\" : { \"$date\" : \"2018-06-13T06:54:10.917Z\"} , \"expire_time\" : { \"$date\" : \"2018-12-30T06:54:10.000Z\"} , \"writetime_expire_time\" : { \"$date\" : \"2018-06-13T06:54:10.918Z\"} , \"update_autofota\" : \"abcdefg\" , \"writetime_update_autofota\" : { \"$date\" : \"2018-06-26T08:49:06.186Z\"} , \"online\" : 1.0 , \"writetime_online\" : { \"$date\" : \"2018-06-27T05:46:21.491Z\"} , \"address\" : \"對(duì)方\" , \"writetime_address\" : { \"$date\" : \"2018-06-13T09:51:51.704Z\"} , \"wifissid@zot\" : \"zy5g\" , \"writetime_wifissid@zot\" : { \"$date\" : \"2018-06-27T07:24:38.252Z\"} , \"swver@zot\" : \"ZHUYUN_1.4.3\" , \"writetime_swver@zot\" : { \"$date\" : \"2018-06-26T06:30:33.537Z\"} , \"hwver@zot\" : \"ESP8266EX\" , \"writetime_hwver@zot\" : { \"$date\" : \"2018-06-26T06:30:33.123Z\"} , \"fota_update@zot\" : \"bin\" , \"writetime_fota_update@zot\" : { \"$date\" : \"2018-06-15T08:10:41.319Z\"}}";
注:進(jìn)行了兩次的json操作摄乒,第一次為將content字符串轉(zhuǎn)換為json對(duì)象瑰煎,第二次為從json對(duì)象中提取出設(shè)備屬性信息值的數(shù)組屹篓。這個(gè)過程為實(shí)際代碼中的應(yīng)用過程莉御。
2.6注意事項(xiàng)
主要對(duì)比Fastjson和Json-lib的使用俗冻。Fastjson和Json-lib的用法基本一致,有個(gè)別小地方不太一樣牍颈,需要注意迄薄。
1.Fastjson序列化時(shí)會(huì)出現(xiàn)序列化后和序列化前的順序錯(cuò)亂,雖然這不影響解析煮岁,但是會(huì)影響閱讀讥蔽,使用
JSONObject jsonObject = new JSONObject(true);
可以防止序列化順序錯(cuò)亂,不過這僅限普通的json人乓,不包含數(shù)組勤篮。
2.數(shù)組json序列化注意事項(xiàng)。如:
ArrayList<String> attrArray = new ArrayList<String>();
attrArray.add(...);
attrArray.add(...);
JSONObject jsonObject = new JSONObject(true);
jsonObject.put("attrArray", attrArray.toString());
如果是Json-lib色罚,序列化后碰缔,值是{"attrArray":[{...},{...}]}
如果是Fastjson,序列化后戳护,值是{"attrArray":"[{...},{...}]"}
會(huì)發(fā)現(xiàn)金抡,F(xiàn)astjson序列化后數(shù)組前會(huì)多了引號(hào),為了去掉這個(gè)引號(hào)腌且,需要將jsonObject.put("attrArray", attrArray.toString());改為jsonObject.put("attrArray", JSONArray.parseArray(attrArray.toString()));
此時(shí)就會(huì)去掉引號(hào)了梗肝,但是又發(fā)現(xiàn)數(shù)組里面的順序也會(huì)錯(cuò)亂,為了去除錯(cuò)亂铺董,可以使用jsonObject.put("attrArray", JSONArray.parseArray(attrArray.toString(), new LinkedHashMap<String,Object>().getClass()));