潘 翔,徐小良
(杭州電子科技大學(xué)計(jì)算機(jī)軟件與智能技術(shù)研究所,浙江 杭州 310018)
?
基于JSON的網(wǎng)絡(luò)傳輸優(yōu)化策略研究
潘翔,徐小良
(杭州電子科技大學(xué)計(jì)算機(jī)軟件與智能技術(shù)研究所,浙江 杭州 310018)
摘要:JSON是以key/value對(duì)的形式封裝數(shù)據(jù),針對(duì)JSON數(shù)據(jù)對(duì)象存在相同的key值而重復(fù)傳輸?shù)膯栴},提出一種優(yōu)化的JSON傳輸策略。該優(yōu)化策略將原本層次結(jié)構(gòu)的JSON數(shù)據(jù)進(jìn)行扁平化處理,提取出所有對(duì)象共有的key值作為模板,實(shí)現(xiàn)內(nèi)容數(shù)據(jù)value與key值相分離,只傳輸一次key值。實(shí)驗(yàn)結(jié)果表明,該JSON優(yōu)化策略有效可行,尤其是在key值相對(duì)于JSON數(shù)據(jù)比重較大,傳輸數(shù)據(jù)量較大的情況下,優(yōu)化效果更顯著。
關(guān)鍵詞:網(wǎng)絡(luò)傳輸優(yōu)化;JSON;扁平化
0引言
當(dāng)前傳統(tǒng)網(wǎng)絡(luò)和移動(dòng)互聯(lián)發(fā)展迅速,數(shù)據(jù)量級(jí)也在不斷擴(kuò)大,選擇數(shù)據(jù)開銷較小的數(shù)據(jù)結(jié)構(gòu)對(duì)于降低網(wǎng)絡(luò)傳輸量具有重要作用。可擴(kuò)展標(biāo)記語言(eXtensible Markup Language,XML)不僅可以用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,同時(shí)也可以作為數(shù)據(jù)傳輸格式[1]。采用XML形式傳輸數(shù)據(jù),具有簡單易讀、結(jié)構(gòu)統(tǒng)一等優(yōu)點(diǎn),但其傳輸數(shù)據(jù)內(nèi)容較多,格式相對(duì)復(fù)雜,造成不必要的數(shù)據(jù)冗余。JSON作為一種更輕量級(jí)的數(shù)據(jù)交換格式,數(shù)據(jù)以key/value對(duì)的形式在網(wǎng)絡(luò)中交互,有效壓縮了數(shù)據(jù)內(nèi)容,簡化數(shù)據(jù)格式,在網(wǎng)絡(luò)數(shù)據(jù)傳輸領(lǐng)域得到了廣泛應(yīng)用[2-4]。然而,JSON由于其key/value成對(duì)出現(xiàn)的特性,仍然存在key數(shù)據(jù)重復(fù)傳輸?shù)膯栴}。因此,在移動(dòng)互聯(lián)應(yīng)用迅速普及的年代,進(jìn)一步優(yōu)化JSON格式以減少或避免key數(shù)據(jù)重復(fù)傳輸問題的研究,對(duì)節(jié)省數(shù)據(jù)傳輸開銷和改善傳輸性能具有非常重要的意義。針對(duì)上述問題,本文提出了一種基于扁平化思想的JSON優(yōu)化策略,以減少重復(fù)key數(shù)據(jù)的傳輸開銷,有效地提升了網(wǎng)絡(luò)數(shù)據(jù)傳輸效率。
1JSON及問題提出
JSON是基于JavaScript的一個(gè)子集,采用完全獨(dú)立于語言的文本格式。這些特性使JSON成為理想的數(shù)據(jù)交換語言,易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成[5]。JSON對(duì)象數(shù)組的一個(gè)簡單示例如圖1所示。
{"programmers":[{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}...]}
圖1JSON對(duì)象數(shù)組示例圖
由圖1可知,每個(gè)“{}”對(duì)表示一個(gè)JSON對(duì)象,“[]”所包含的是若干個(gè)JSON對(duì)象,形成一個(gè)對(duì)象數(shù)組。圖1中可以看出,每個(gè)JSON對(duì)象都存在相同的key值,如“firstName,lastName,email”,在網(wǎng)絡(luò)中造成重復(fù)傳輸這些key。如果能夠優(yōu)化JSON格式,把相同的key值提取出來,作為單獨(dú)的key/value對(duì)存放在JSON中,使得一次網(wǎng)絡(luò)傳輸只傳輸一次key值,即可有效減少數(shù)據(jù)量。因此,減少或避免JSON數(shù)據(jù)中key值的重復(fù)傳輸對(duì)于減少網(wǎng)絡(luò)傳輸開銷是顯然的,尤其是key相對(duì)于JSON數(shù)據(jù)比重較大時(shí)。
2JSON優(yōu)化策略
為了解決上節(jié)所提到的問題,本文提出的JSON優(yōu)化算法的基本思想是將原本層次結(jié)構(gòu)的JSON對(duì)象扁平化處理:提取出所有數(shù)據(jù)對(duì)象共有的key值作為模板放入一個(gè)根據(jù)特定規(guī)則、預(yù)先設(shè)定的鍵值對(duì)中;而數(shù)據(jù)對(duì)象中內(nèi)容數(shù)據(jù)value則由原本鍵值對(duì)形式扁平化為普通數(shù)據(jù)數(shù)組。特別的,如果key值對(duì)應(yīng)的value值仍然是一個(gè)對(duì)象,即內(nèi)嵌對(duì)象,將會(huì)遞歸地分離內(nèi)容數(shù)據(jù)與key值模板。
為了更好地闡述JSON優(yōu)化策略及實(shí)現(xiàn),本文基于JAVA編程語言進(jìn)行說明。
優(yōu)化策略的優(yōu)化過程可由狀態(tài)機(jī)M(JSON)=(Q,S,T,f,g)表示,如圖2所示。
圖2 優(yōu)化算法狀態(tài)機(jī)
其中Q是有限狀態(tài)集;T是觸發(fā)事件集;S是輸入JSON序列集;f是狀態(tài)轉(zhuǎn)換函數(shù)集;Q*S->Q,(其中*表示狀態(tài)集Q根據(jù)輸入序列S的不同所發(fā)生的狀態(tài)變化);g為輸出集;N∈Q,是狀態(tài)集的初態(tài),即JSON未開始解析前的狀態(tài)。
狀態(tài)集Q包括:{N:初態(tài);A:數(shù)組型節(jié)點(diǎn);A(i):數(shù)組型節(jié)點(diǎn)的元素,i∈{1,2,3,…,n};O:JavaBean型對(duì)象節(jié)點(diǎn);O(i):JavaBean型對(duì)象的屬性,i∈{1,2,3,…,n};T:中間節(jié)點(diǎn),臨時(shí)狀態(tài)集;C:最終節(jié)點(diǎn),完成狀態(tài),即帶有模板的JSON序列;}
觸發(fā)事件集T包括:{FO:JavaBean型對(duì)象節(jié)點(diǎn)解析完成;FA:數(shù)組型節(jié)點(diǎn)解析完成;TO:當(dāng)前節(jié)點(diǎn)是JavaBean型對(duì)象;TA:當(dāng)前節(jié)點(diǎn)是數(shù)組型;FC:所有節(jié)點(diǎn)處理完成;}
輸入序列集S包括:{JsonArray:JSON數(shù)組型序列;JavaBean:JSON中JavaBean對(duì)象序列;Other:JSON中基礎(chǔ)數(shù)據(jù)類型,如int,float,double等;End:JSON中一個(gè)key/value結(jié)束標(biāo)示符;Complete:JSON中所有key/value結(jié)束標(biāo)示符;}
狀態(tài)轉(zhuǎn)換函數(shù)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},其中當(dāng)f(A(i),JavaBean)時(shí)提取相應(yīng)模板數(shù)據(jù),存入一個(gè)按一定規(guī)則命名的key值中。
3理論分析
原始JSON數(shù)據(jù)傳輸?shù)拈_銷計(jì)算公式如下:
(1)
式中,Ai表示JSON數(shù)組元素對(duì)象的第i個(gè)屬性(Attribute)的長度,i∈{1,2,3,…,m};Dij表示第j個(gè)數(shù)組元素對(duì)象的第i個(gè)屬性對(duì)應(yīng)的數(shù)據(jù)(Data)長度,j∈{1,2,3,…,n};KL表示該JSON數(shù)組對(duì)象的key的字符長度(KeyLength)。原始JSON的數(shù)據(jù)開銷主要在Ai的迭代相加上,因?yàn)镴SON語法的原因,Ai被重復(fù)相加,明顯導(dǎo)致數(shù)據(jù)傳輸開銷增大。
經(jīng)過優(yōu)化后的JSON的開銷計(jì)算公式為:
(2)
式中,tKL表示提取出來的公共模板長度。
特別地,當(dāng)JSON對(duì)象數(shù)組中的元素包含內(nèi)嵌對(duì)象的情況對(duì)其進(jìn)一步優(yōu)化,下面對(duì)這種情況下的開銷計(jì)算進(jìn)行分析。
原始JSON對(duì)象數(shù)組當(dāng)存在對(duì)象內(nèi)嵌時(shí),其數(shù)據(jù)傳輸開銷計(jì)算公式為:
(3)
式中,JAlj表示第j個(gè)JSON數(shù)組元素對(duì)象的第個(gè)屬性對(duì)應(yīng)的內(nèi)嵌對(duì)象的各個(gè)屬性長度之和:
(4)
式中,jai表示該內(nèi)嵌對(duì)象的第i個(gè)屬性長度,i∈{1,2,3,…,m}。JDlj表示第l個(gè)JSON數(shù)組對(duì)象的第j個(gè)屬性對(duì)應(yīng)的內(nèi)嵌對(duì)象的各個(gè)屬性對(duì)應(yīng)的實(shí)際數(shù)據(jù)長度之和:
(5)
式中,jdk表示該內(nèi)嵌對(duì)象的第k個(gè)屬性長度,k∈{1,2,3,…,m}。
對(duì)象內(nèi)嵌情況下經(jīng)過優(yōu)化后的JSON的數(shù)據(jù)開銷計(jì)算公式如下:
(6)
式中,tKLp表示由優(yōu)化提取出的各個(gè)模板的長度,p∈{1,2,3,…,q}。
在大數(shù)量級(jí)情況下,∑tKL+KL長度將遠(yuǎn)小于公式前半部分,故而優(yōu)化效果如下:
(7)
當(dāng)JSON對(duì)象數(shù)組元素個(gè)數(shù)越多,即n越大,上式差值越大,優(yōu)化效果也更加明顯。
經(jīng)過進(jìn)一步研究分析,JSON的優(yōu)化效果還和對(duì)象屬性長度與該屬性對(duì)應(yīng)數(shù)據(jù)長度的比值有關(guān),即Ai/Dij的值。這里把Ai/Dij的算術(shù)平均值記作χ,由比較兩個(gè)公式可以得出, χ的值越大,經(jīng)過優(yōu)化后JSON減少的開銷越多,優(yōu)化效果越明顯。
4實(shí)驗(yàn)驗(yàn)證
根據(jù)理論分析可知,在不同的χ情況下,JSON優(yōu)化效果是不同的。實(shí)驗(yàn)選定χ值為0.5的一系列不同個(gè)數(shù)的JSON數(shù)組進(jìn)行實(shí)驗(yàn),結(jié)果如表1所示。
表1 JSON優(yōu)化前后文本大小及傳輸時(shí)間比較
由表1可得出,本文的JSON優(yōu)化效果是明顯的,特別是在JSON數(shù)據(jù)量較大的情況下。
針對(duì)不同的χ值進(jìn)行實(shí)驗(yàn),結(jié)果如圖3。曲線1表示優(yōu)化后的JSON相對(duì)原始JSON的優(yōu)化率,曲線2表示JSON優(yōu)化前后傳輸時(shí)間的比值。
圖3 各χ值下JSON優(yōu)化情況
圖3數(shù)據(jù)顯示,隨著χ值的增大,JSON優(yōu)化效果更明顯,網(wǎng)絡(luò)傳輸時(shí)間更少。實(shí)驗(yàn)結(jié)果符合預(yù)期理論分析。
5結(jié)束語
本文提出的JSON優(yōu)化策略在基于扁平化思想的基礎(chǔ)上,提取重復(fù)的key值數(shù)據(jù),大大降低了數(shù)據(jù)的重復(fù)傳輸量,實(shí)驗(yàn)結(jié)果證明該策略優(yōu)化效果明顯。研究成果對(duì)于減少網(wǎng)絡(luò)流量消耗,提高信息傳輸效率具有一定理論的價(jià)值,而且優(yōu)化策略易于實(shí)現(xiàn),代碼開發(fā)便捷,因此在工程上具有一定的應(yīng)用價(jià)值。在以后的工作中,可以針對(duì)更多、更復(fù)雜的JSON對(duì)象類型的優(yōu)化開展更深入的理論分析和相關(guān)研究。
參考文獻(xiàn)
[1]方躍堅(jiān),余枝強(qiáng),翟磊,等.一種混合并行XML解析方法[J].軟件學(xué)報(bào),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對(duì)AJAX技術(shù)中的XML性能的優(yōu)化仿真[J].通信技術(shù),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
中圖分類號(hào):TP393.2
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1001-9146(2015)05-0027-04
作者簡介:潘翔(1990-),男,浙江東陽人,在讀研究生,移動(dòng)互聯(lián)網(wǎng).徐小良教授,E-mail:xxl@hdu.edu.cn.
基金項(xiàng)目:浙江省公益技術(shù)研究計(jì)劃資助項(xiàng)目(2014C33066)
收稿日期:2015-01-14
DOI:10.13954/j.cnki.hdu.2015.05.006