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