基于JSON的网络传输优化策略研究
2016-01-27徐小良
潘 翔,徐小良
(杭州电子科技大学计算机软件与智能技术研究所,浙江 杭州 310018)
基于JSON的网络传输优化策略研究
潘翔,徐小良
(杭州电子科技大学计算机软件与智能技术研究所,浙江 杭州 310018)
摘要:JSON是以key/value对的形式封装数据,针对JSON数据对象存在相同的key值而重复传输的问题,提出一种优化的JSON传输策略。该优化策略将原本层次结构的JSON数据进行扁平化处理,提取出所有对象共有的key值作为模板,实现内容数据value与key值相分离,只传输一次key值。实验结果表明,该JSON优化策略有效可行,尤其是在key值相对于JSON数据比重较大,传输数据量较大的情况下,优化效果更显著。
关键词:网络传输优化;JSON;扁平化
0引言
当前传统网络和移动互联发展迅速,数据量级也在不断扩大,选择数据开销较小的数据结构对于降低网络传输量具有重要作用。可扩展标记语言(eXtensible Markup Language,XML)不仅可以用来标记数据、定义数据类型,同时也可以作为数据传输格式[1]。采用XML形式传输数据,具有简单易读、结构统一等优点,但其传输数据内容较多,格式相对复杂,造成不必要的数据冗余。JSON作为一种更轻量级的数据交换格式,数据以key/value对的形式在网络中交互,有效压缩了数据内容,简化数据格式,在网络数据传输领域得到了广泛应用[2-4]。然而,JSON由于其key/value成对出现的特性,仍然存在key数据重复传输的问题。因此,在移动互联应用迅速普及的年代,进一步优化JSON格式以减少或避免key数据重复传输问题的研究,对节省数据传输开销和改善传输性能具有非常重要的意义。针对上述问题,本文提出了一种基于扁平化思想的JSON优化策略,以减少重复key数据的传输开销,有效地提升了网络数据传输效率。
1JSON及问题提出
JSON是基于JavaScript的一个子集,采用完全独立于语言的文本格式。这些特性使JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成[5]。JSON对象数组的一个简单示例如图1所示。
{"programmers":[{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}...]}
图1JSON对象数组示例图
由图1可知,每个“{}”对表示一个JSON对象,“[]”所包含的是若干个JSON对象,形成一个对象数组。图1中可以看出,每个JSON对象都存在相同的key值,如“firstName,lastName,email”,在网络中造成重复传输这些key。如果能够优化JSON格式,把相同的key值提取出来,作为单独的key/value对存放在JSON中,使得一次网络传输只传输一次key值,即可有效减少数据量。因此,减少或避免JSON数据中key值的重复传输对于减少网络传输开销是显然的,尤其是key相对于JSON数据比重较大时。
2JSON优化策略
为了解决上节所提到的问题,本文提出的JSON优化算法的基本思想是将原本层次结构的JSON对象扁平化处理:提取出所有数据对象共有的key值作为模板放入一个根据特定规则、预先设定的键值对中;而数据对象中内容数据value则由原本键值对形式扁平化为普通数据数组。特别的,如果key值对应的value值仍然是一个对象,即内嵌对象,将会递归地分离内容数据与key值模板。
为了更好地阐述JSON优化策略及实现,本文基于JAVA编程语言进行说明。
优化策略的优化过程可由状态机M(JSON)=(Q,S,T,f,g)表示,如图2所示。
图2 优化算法状态机
其中Q是有限状态集;T是触发事件集;S是输入JSON序列集;f是状态转换函数集;Q*S->Q,(其中*表示状态集Q根据输入序列S的不同所发生的状态变化);g为输出集;N∈Q,是状态集的初态,即JSON未开始解析前的状态。
状态集Q包括:{N:初态;A:数组型节点;A(i):数组型节点的元素,i∈{1,2,3,…,n};O:JavaBean型对象节点;O(i):JavaBean型对象的属性,i∈{1,2,3,…,n};T:中间节点,临时状态集;C:最终节点,完成状态,即带有模板的JSON序列;}
触发事件集T包括:{FO:JavaBean型对象节点解析完成;FA:数组型节点解析完成;TO:当前节点是JavaBean型对象;TA:当前节点是数组型;FC:所有节点处理完成;}
输入序列集S包括:{JsonArray:JSON数组型序列;JavaBean:JSON中JavaBean对象序列;Other:JSON中基础数据类型,如int,float,double等;End:JSON中一个key/value结束标示符;Complete:JSON中所有key/value结束标示符;}
状态转换函数f包括:{f(N,JsonArray)=A,f(A(i),JavaBean)=O,f(O(i),Other)=A,f(A(i),End)=T,f(T,JsonArray)=A,f(T,Complete)=C},其中当f(A(i),JavaBean)时提取相应模板数据,存入一个按一定规则命名的key值中。
3理论分析
原始JSON数据传输的开销计算公式如下:
(1)
式中,Ai表示JSON数组元素对象的第i个属性(Attribute)的长度,i∈{1,2,3,…,m};Dij表示第j个数组元素对象的第i个属性对应的数据(Data)长度,j∈{1,2,3,…,n};KL表示该JSON数组对象的key的字符长度(KeyLength)。原始JSON的数据开销主要在Ai的迭代相加上,因为JSON语法的原因,Ai被重复相加,明显导致数据传输开销增大。
经过优化后的JSON的开销计算公式为:
(2)
式中,tKL表示提取出来的公共模板长度。
特别地,当JSON对象数组中的元素包含内嵌对象的情况对其进一步优化,下面对这种情况下的开销计算进行分析。
原始JSON对象数组当存在对象内嵌时,其数据传输开销计算公式为:
(3)
式中,JAlj表示第j个JSON数组元素对象的第个属性对应的内嵌对象的各个属性长度之和:
(4)
式中,jai表示该内嵌对象的第i个属性长度,i∈{1,2,3,…,m}。JDlj表示第l个JSON数组对象的第j个属性对应的内嵌对象的各个属性对应的实际数据长度之和:
(5)
式中,jdk表示该内嵌对象的第k个属性长度,k∈{1,2,3,…,m}。
对象内嵌情况下经过优化后的JSON的数据开销计算公式如下:
(6)
式中,tKLp表示由优化提取出的各个模板的长度,p∈{1,2,3,…,q}。
在大数量级情况下,∑tKL+KL长度将远小于公式前半部分,故而优化效果如下:
(7)
当JSON对象数组元素个数越多,即n越大,上式差值越大,优化效果也更加明显。
经过进一步研究分析,JSON的优化效果还和对象属性长度与该属性对应数据长度的比值有关,即Ai/Dij的值。这里把Ai/Dij的算术平均值记作χ,由比较两个公式可以得出, χ的值越大,经过优化后JSON减少的开销越多,优化效果越明显。
4实验验证
根据理论分析可知,在不同的χ情况下,JSON优化效果是不同的。实验选定χ值为0.5的一系列不同个数的JSON数组进行实验,结果如表1所示。
表1 JSON优化前后文本大小及传输时间比较
由表1可得出,本文的JSON优化效果是明显的,特别是在JSON数据量较大的情况下。
针对不同的χ值进行实验,结果如图3。曲线1表示优化后的JSON相对原始JSON的优化率,曲线2表示JSON优化前后传输时间的比值。
图3 各χ值下JSON优化情况
图3数据显示,随着χ值的增大,JSON优化效果更明显,网络传输时间更少。实验结果符合预期理论分析。
5结束语
本文提出的JSON优化策略在基于扁平化思想的基础上,提取重复的key值数据,大大降低了数据的重复传输量,实验结果证明该策略优化效果明显。研究成果对于减少网络流量消耗,提高信息传输效率具有一定理论的价值,而且优化策略易于实现,代码开发便捷,因此在工程上具有一定的应用价值。在以后的工作中,可以针对更多、更复杂的JSON对象类型的优化开展更深入的理论分析和相关研究。
参考文献
[1]方跃坚,余枝强,翟磊,等.一种混合并行XML解析方法[J].软件学报,2013,24(6):1196-1206.
[2]Maeda K.Performance evaluation of object serialization libraries in XML,JSON and binary formats[C]//Digital Information and Communication Technology and Its Applications,Second International Conference on.IEEE,2012:177-182.
[3]Phan B V,Pardede E.Active XML(AXML)research:Survey on the representation,system architecture,data exchange mechanism and query evaluation[J].Journal of Network and Computer Applications,2014,37:348-364.
[4]Cavalieri F,Guerrini G,Mesiti M.XSPath:Navigation on XML Schema-s Made Easy[J].IEEE Transactions on Knowledge and Data Engineering,2014,26(2):485-499.
[5]崔璨,倪宏.使用JSON对AJAX技术中的XML性能的优化仿真[J].通信技术,2009,42(8):108-110.
Research on the Optimization Strategy Based on
JSON Network Transmission
Pan Xiang,Xu Xiaoliang
(InstituteofComputerSoftwareandIntelligentTechnology,HangzhouDianziUniversity,HangzhouZhejiang310018,China)
Abstract:JSON encapsulates data in the form of key/value.This paper aims to introduce an optimization strategy to solve the repetition transmission caused by the key of JSON.This optimization strategy flattens the original JSON data which was hierarchy,extracts the common key value as a template,thus separating the content data of value from the template.As is verified in the experiment,JSON format adopting this optimization strategy is feasible and effective the optimization effect is more obvious especially in the key value as a larger proportion of JSON data and the condition of large the amount of data transmission.
Key words:optimization of network transmission;JSON;flattening
中图分类号:TP393.2
文献标识码:A
文章编号:1001-9146(2015)05-0027-04
作者简介:潘翔(1990-),男,浙江东阳人,在读研究生,移动互联网.徐小良教授,E-mail:xxl@hdu.edu.cn.
基金项目:浙江省公益技术研究计划资助项目(2014C33066)
收稿日期:2015-01-14
DOI:10.13954/j.cnki.hdu.2015.05.006