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