機(jī)頂盒json數(shù)據(jù)解析存儲(chǔ)方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域,尤其涉及一種機(jī)頂盒JSON數(shù)據(jù)解析存儲(chǔ)方法及系統(tǒng)。
【背景技術(shù)】
[0002]JSON格式作為一種輕量級(jí)的數(shù)據(jù)交換格式,主要用于傳送數(shù)據(jù),其采用完全獨(dú)立于語言的文本格式,能夠?qū)avaScript對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將字符串從Web客戶機(jī)傳遞給服務(wù)器端程序。JavaScript很容易解釋JS0N,而且JSON可以表示比“名稱/值對(duì)”更復(fù)雜的結(jié)構(gòu),這些特性使JSON成為理想的數(shù)據(jù)交換語言,易于閱讀和編寫,同時(shí)也易于解析和生成。
[0003]在機(jī)頂盒應(yīng)用中,JSON數(shù)據(jù)往往是從遠(yuǎn)程服務(wù)器端獲取。為了避免JSON數(shù)據(jù)被反復(fù)解析,通常會(huì)將JSON數(shù)據(jù)解析并存儲(chǔ)到機(jī)頂盒端。但是,在機(jī)頂盒端解析JSON數(shù)據(jù)存儲(chǔ)的過程中,會(huì)因?yàn)槟承┰?如機(jī)頂盒端或服務(wù)器端異常、網(wǎng)絡(luò)異常等),導(dǎo)致JSON數(shù)據(jù)無法繼續(xù)解析并存儲(chǔ),從而破壞了 JSON數(shù)據(jù)的完整性。為了保證JSON數(shù)據(jù)的完整性,傳統(tǒng)做法是當(dāng)出現(xiàn)異常時(shí),通知重新解析并存儲(chǔ)JSON數(shù)據(jù),這種方式需要對(duì)每種異常均做出處理,成本較高,而且需要全部重新解析存儲(chǔ)數(shù)據(jù),效率比較低,大大不利于JSON數(shù)據(jù)的解析。
【發(fā)明內(nèi)容】
[0004]有鑒于此,有必要針對(duì)上述保證機(jī)頂盒JSON數(shù)據(jù)解析存儲(chǔ)完整性成本高、效率低的技術(shù)問題,提供一種機(jī)頂盒JSON數(shù)據(jù)解析存儲(chǔ)方法及系統(tǒng)。
[0005]本發(fā)明提供一種機(jī)頂盒JSON數(shù)據(jù)解析存儲(chǔ)方法,包括如下步驟:
[0006]SlO:在解析JSON數(shù)據(jù)時(shí),獲取JSON數(shù)據(jù)的數(shù)據(jù)列表,通過數(shù)據(jù)列表獲取JSON數(shù)據(jù)的總項(xiàng)數(shù)并進(jìn)行存儲(chǔ);
[0007]S20:設(shè)置位置記錄,用于在每一項(xiàng)JSON數(shù)據(jù)全部解析并保存后,記錄已經(jīng)完整解析并保存的JSON數(shù)據(jù)的項(xiàng)數(shù)N ;
[0008]S30:將位置記錄的項(xiàng)數(shù)N與總項(xiàng)數(shù)進(jìn)行比較,若位置記錄的項(xiàng)數(shù)N小于總項(xiàng)數(shù),則清除第N+1項(xiàng)JSON數(shù)據(jù),并由第N+1項(xiàng)JSON數(shù)據(jù)開始重新解析并進(jìn)行存儲(chǔ),直至位置記錄的項(xiàng)數(shù)與總項(xiàng)數(shù)相同。
[0009]在進(jìn)一步的方式中,所述步驟S30還包括:
[0010]在對(duì)當(dāng)前JSON數(shù)據(jù)進(jìn)行解析時(shí),檢測(cè)之前是否存在版本號(hào),若不存在則說明是第一次解析,則將當(dāng)前JSON數(shù)據(jù)重新進(jìn)行解析并存儲(chǔ),若存在,則獲取之前的版本號(hào)。
[0011]在進(jìn)一步的方式中,所述步驟S30還包括:
[0012]獲取當(dāng)前JSON數(shù)據(jù)的版本號(hào),并與之前的版本號(hào)進(jìn)行比較,若不一致,則當(dāng)前JSON數(shù)據(jù)全部進(jìn)行解析并存儲(chǔ),進(jìn)行更新;若一致,則將位置記錄的項(xiàng)數(shù)N與總項(xiàng)數(shù)進(jìn)行比較。
[0013]在進(jìn)一步的方式中,所述步驟S30具體為:
[0014]若位置記錄的項(xiàng)數(shù)N小于總項(xiàng)數(shù),JSON數(shù)據(jù)中含有指向另一 JSON數(shù)據(jù)的路徑時(shí),則清除第N+1項(xiàng)數(shù)據(jù),并且清除第N+1項(xiàng)指向的另一 JSON數(shù)據(jù),重新從第N+1項(xiàng)數(shù)據(jù)開始解析并存儲(chǔ),同時(shí)重新解析并存儲(chǔ)第N+1項(xiàng)指向的另一 JSON數(shù)據(jù)。
[0015]本發(fā)明還提供一種機(jī)頂盒JSON數(shù)據(jù)解析存儲(chǔ)系統(tǒng),包括:
[0016]總項(xiàng)數(shù)獲取單元,在解析JSON數(shù)據(jù)時(shí),獲取JSON數(shù)據(jù)的數(shù)據(jù)列表,通過數(shù)據(jù)列表獲取JSON數(shù)據(jù)的總項(xiàng)數(shù)并進(jìn)行存儲(chǔ);
[0017]位置記錄單元,設(shè)置位置記錄,用于在每一項(xiàng)JSON數(shù)據(jù)全部解析并保存后,記錄已經(jīng)完整解析并保存的JSON數(shù)據(jù)的項(xiàng)數(shù)N ;
[0018]解析存儲(chǔ)單元,將位置記錄的項(xiàng)數(shù)N與總項(xiàng)數(shù)進(jìn)行比較,若位置記錄的項(xiàng)數(shù)N小于總項(xiàng)數(shù),則清除第N+1項(xiàng)JSON數(shù)據(jù),并由第N+1項(xiàng)JSON數(shù)據(jù)開始重新解析并進(jìn)行存儲(chǔ),直至位置記錄的項(xiàng)數(shù)與總項(xiàng)數(shù)相同。
[0019]在進(jìn)一步的方式中,所述解析存儲(chǔ)單元在對(duì)當(dāng)前JSON數(shù)據(jù)進(jìn)行解析時(shí),檢測(cè)之前是否存在版本號(hào),若不存在則說明是第一次解析,則將當(dāng)前JSON數(shù)據(jù)重新進(jìn)行解析并存儲(chǔ),若存在,則獲取之前的版本號(hào)。
[0020]在進(jìn)一步的方式中,所述解析存儲(chǔ)單元獲取當(dāng)前JSON數(shù)據(jù)的版本號(hào),并與之前的版本號(hào)進(jìn)行比較,若不一致,則當(dāng)前JSON數(shù)據(jù)全部進(jìn)行解析并存儲(chǔ),進(jìn)行更新;若一致,則將位置記錄的項(xiàng)數(shù)N與總項(xiàng)數(shù)進(jìn)行比較。
[0021]在進(jìn)一步的方式中,若位置記錄的項(xiàng)數(shù)N小于總項(xiàng)數(shù),JSON數(shù)據(jù)中含有指向另一JSON數(shù)據(jù)的路徑時(shí),所述解析存儲(chǔ)單元?jiǎng)t清除第N+1項(xiàng)數(shù)據(jù),并且清除第N+1項(xiàng)指向的另一 JSON數(shù)據(jù),重新從第N+1項(xiàng)數(shù)據(jù)開始解析并存儲(chǔ),同時(shí)重新解析并存儲(chǔ)第N+1項(xiàng)指向的另一 JSON數(shù)據(jù)。
[0022]本發(fā)明機(jī)頂盒JSON數(shù)據(jù)解析存儲(chǔ)方法和系統(tǒng),獲取JSON數(shù)據(jù)的總項(xiàng)數(shù),并實(shí)時(shí)對(duì)JSON數(shù)據(jù)進(jìn)行位置記錄,將記錄的位置與總項(xiàng)數(shù)進(jìn)行對(duì)比,若記錄的位置小于總項(xiàng)數(shù),由第N+1項(xiàng)JSON數(shù)據(jù)開始重新解析并進(jìn)行存儲(chǔ),通過定位發(fā)生異常的位置來對(duì)JSON數(shù)據(jù)進(jìn)行解析和存儲(chǔ),不需要將所有JSON數(shù)據(jù)進(jìn)行解析和存儲(chǔ),從而大大提高了 JSON數(shù)據(jù)解析存儲(chǔ)的效率,大大降低了成本。
【附圖說明】
[0023]圖1是一個(gè)實(shí)施例中的機(jī)頂盒JSON數(shù)據(jù)解析存儲(chǔ)方法的流程圖;
[0024]圖2是一個(gè)實(shí)施例中的機(jī)頂盒JSON數(shù)據(jù)解析存儲(chǔ)系統(tǒng)的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0025]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0026]圖1是一個(gè)實(shí)施例中的機(jī)頂盒JSON數(shù)據(jù)解析存儲(chǔ)方法的流程圖,如圖1所示,該方法包括如下步驟:
[0027]SlO:在解析JSON數(shù)據(jù)時(shí),獲取JSON數(shù)據(jù)的數(shù)據(jù)列表,通過數(shù)據(jù)列表獲取JSON數(shù)據(jù)的總項(xiàng)數(shù)并進(jìn)行存儲(chǔ)。
[0028]在機(jī)頂盒對(duì)JSON數(shù)據(jù)解析過程中,導(dǎo)致機(jī)頂盒無法完整解析及存儲(chǔ)JSON數(shù)據(jù)的異常有多種原因,對(duì)于每種異常機(jī)頂盒都需要重新解析存儲(chǔ)JSON數(shù)據(jù),這就會(huì)造成成本和效率的問題。為避免這個(gè)問題,該實(shí)施例中,由于在發(fā)生異常時(shí),機(jī)頂盒可能已經(jīng)解析并存儲(chǔ)了部分JSON數(shù)據(jù),故可以對(duì)已經(jīng)解析存儲(chǔ)的JSON數(shù)據(jù)進(jìn)行位置記錄,不需要重新去解析和存儲(chǔ)所有的JSON數(shù)據(jù)。具體的,為能夠?qū)SON數(shù)據(jù)進(jìn)行位置記錄,該步驟在解析JSON數(shù)據(jù)時(shí),首先獲取JSON數(shù)據(jù)的數(shù)據(jù)列表,然后通過數(shù)據(jù)列表獲取JSON數(shù)據(jù)的總項(xiàng)數(shù)并進(jìn)行存儲(chǔ),這樣獲取JSON數(shù)據(jù)的總長(zhǎng)度。
[0029]S20:設(shè)置位置記錄,用于在每一項(xiàng)JSON數(shù)據(jù)全部解析并保存后,記錄已經(jīng)完整解析并保存的JSON數(shù)據(jù)的項(xiàng)數(shù)N。
[0030]在獲取JSON數(shù)據(jù)的總項(xiàng)數(shù),也即JSON數(shù)據(jù)的總長(zhǎng)度后,設(shè)置位置記錄,位置記錄用于在每一項(xiàng)JSON數(shù)據(jù)全部解析并保存后,記錄已經(jīng)完整解析并存儲(chǔ)的項(xiàng)數(shù)N,位置記錄在每解析存儲(chǔ)完一項(xiàng)JSON數(shù)據(jù)后更新一次,即將所記錄的項(xiàng)數(shù)加1,這樣就能實(shí)時(shí)對(duì)已經(jīng)解析存儲(chǔ)的JSON數(shù)據(jù)進(jìn)行定位。
[0031]S30:將位置記錄的項(xiàng)數(shù)N與總項(xiàng)數(shù)進(jìn)行比較,若位置記錄的項(xiàng)數(shù)N小于總項(xiàng)數(shù),則清除第N+1項(xiàng)JSON數(shù)據(jù),并由第N+1項(xiàng)JSON數(shù)據(jù)開始重新解析并進(jìn)行存儲(chǔ),直至位置記錄的項(xiàng)數(shù)與總項(xiàng)數(shù)相同。
[0032]在記錄已經(jīng)完整解析并保存的JSON數(shù)據(jù)的項(xiàng)數(shù)N后,通過將已經(jīng)記錄的項(xiàng)數(shù)N與總項(xiàng)數(shù)進(jìn)行比較,就能夠知道JSON數(shù)據(jù)是否全部解析并存儲(chǔ)完。若位置記錄的項(xiàng)數(shù)N小于總項(xiàng)數(shù),則說明JSON數(shù)據(jù)沒有全部解析并存儲(chǔ)完,在解析和存儲(chǔ)第N+1項(xiàng)JSON數(shù)據(jù)時(shí)發(fā)生異常,第N+1項(xiàng)JSON數(shù)據(jù)沒有解析并存儲(chǔ)完,由于已經(jīng)對(duì)發(fā)生異常的位置進(jìn)行了記錄,則由第N+1項(xiàng)JSON數(shù)據(jù)開始解析并進(jìn)行存儲(chǔ),直至位置記錄的項(xiàng)數(shù)與總項(xiàng)數(shù)相同,這樣就大大提高了 JSON數(shù)據(jù)解析存儲(chǔ)的效率,大大降低了成本。
[0033]此外,由于JSON數(shù)據(jù)中都有對(duì)應(yīng)的版本,不同版本的JSON數(shù)據(jù)版本號(hào)不同,對(duì)于不同版本號(hào)的JSON數(shù)據(jù),需要全部進(jìn)行重新解析和存儲(chǔ),故該步驟還包括:在對(duì)當(dāng)前JSON數(shù)據(jù)進(jìn)行解析時(shí),檢測(cè)之前是否存在版本號(hào),若不存在則說明是第一次解析,則將當(dāng)前JSON數(shù)據(jù)重新進(jìn)行解析并存儲(chǔ),若存在,則獲取之前的版本號(hào)。
[0034]更進(jìn)一步的,獲取當(dāng)前JSON數(shù)據(jù)的版本號(hào),并與之前的版本號(hào)進(jìn)行比較,若不一致,則當(dāng)前JSON數(shù)據(jù)全部進(jìn)行解析并存儲(chǔ),進(jìn)行更新;若一致,則將位置記錄的項(xiàng)數(shù)N與總項(xiàng)數(shù)進(jìn)行比較。
[0035]同時(shí),由于JSON數(shù)據(jù)每一項(xiàng)內(nèi)容的值可以是任意字符串,該字符串有可能表示指向另一 JSON數(shù)據(jù)的路徑,需要通過該路徑解析另一 JSON數(shù)據(jù)。在該實(shí)施例中,若位置記錄的項(xiàng)數(shù)N小于總項(xiàng)數(shù),JSON數(shù)據(jù)中含有指向另一 JSON數(shù)據(jù)的路徑時(shí),則清除第N+1項(xiàng)數(shù)據(jù),并且清除第N+1項(xiàng)指向的另一 JSON數(shù)據(jù),重新從第N+1項(xiàng)數(shù)據(jù)開始解析并存儲(chǔ),同時(shí)重新解析并存儲(chǔ)第N+1項(xiàng)指向的另一 JSON數(shù)據(jù)。<