JSON序列化和反序列化调研文档

1 测试环境

操作系统:window 7

CPU:i5-5200U 2.20GHz

内存:8GB

运行环境:MyEclipse 2015

JDK:jdk1.8.0_92


2 序列化

2.1 简单数据序列化

原始数据:

String name = "abcdefg";

int age = 25;

boolean verified = false;

序列化后:

{"name":"abcdefg","age":25,"verified":false}

注:测试是单线程测试,时间是毫秒(ms)  

2.2 包含数组数据序列化

原始数据:

String name = "abcdefg";

int age = 25;

boolean verified = false;

封装后的数组为:[{"attrName":"attr1","value":"attribute1"},{"attrName":"attr2","value":123}]

序列化后:

{"name":"abcdefg","age":25,"verified":false,"attrArray":[{"attrName":"attr1","value":"attribute1"},{"attrName":"attr2","value":123}]}

注:测试是单线程测试,时间是毫秒(ms)

2.3 简单Json数据反序列化

Json数据:

{"name":"abcdefg","age":25,"verified":false}

注:测试是单线程测试,时间是毫秒(ms)

2.4 Json数组数据反序列化

Json数据:

{"name":"abcdefg","age":25,"verified":false,"attrArray":[{"attrName":"attr1","value":"attribute1"},{"attrName":"attr2","value":123}]}

注:测试是单线程测试,时间是毫秒(ms)

2.5 实际例子(以获取设备属性信息值的结果进行json转换为例子)

输入数据:

String content = "{ \"cursor\" : { \"firstBatch\" : [ { \"_id\" : { \"$oid\" : \"5b20bf92e2237228c4f343e1\"} , \"keyhash\" : \"Bc1zh875nPEQkymQkzW3V6aj208=\" , \"devname\" : \"卷帘门-两号\" , \"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\" : \"对方\" , \"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}";

输出数据:

String result= "{ \"_id\" : { \"$oid\" : \"5b20bf92e2237228c4f343e1\"} , \"keyhash\" : \"Bc1zh875nPEQkymQkzW3V6aj208=\" , \"devname\" : \"卷帘门-两号\" , \"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\" : \"对方\" , \"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\"}}";

注:进行了两次的json操作,第一次为将content字符串转换为json对象,第二次为从json对象中提取出设备属性信息值的数组。这个过程为实际代码中的应用过程。

注:测试是单线程测试,时间是毫秒(ms)

2.6注意事项

主要对比Fastjson和Json-lib的使用。Fastjson和Json-lib的用法基本一致,有个别小地方不太一样,需要注意。

1.Fastjson序列化时会出现序列化后和序列化前的顺序错乱,虽然这不影响解析,但是会影响阅读,使用

JSONObject jsonObject = new JSONObject(true);

可以防止序列化顺序错乱,不过这仅限普通的json,不包含数组。

2.数组json序列化注意事项。如:

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":"[{...},{...}]"}

会发现,Fastjson序列化后数组前会多了引号,为了去掉这个引号,需要将jsonObject.put("attrArray", attrArray.toString());改为jsonObject.put("attrArray", JSONArray.parseArray(attrArray.toString()));

此时就会去掉引号了,但是又发现数组里面的顺序也会错乱,为了去除错乱,可以使用jsonObject.put("attrArray", JSONArray.parseArray(attrArray.toString(), new LinkedHashMap<String,Object>().getClass()));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容