構(gòu)字符棧的棧頂出棧,即“[”出棧,正好跟讀取到的“]”匹配,屬性名稱棧的棧頂出棧,即“X “出桟,生成一條(PR,X,Data/PR/,“”);后面以此類推,最后生成的結(jié)果如下:
[0067]{"PR","UP","Data/PR/","100"}
[0068]{"PR","LOW","Data/PR/","O"}
[0069]{"X","XI","Data/PR/X/","10"}
[0070]{"X","X2","Data/PR/X/","20"}
[0071]{"X","X3","Data/PR/X/","30"}
[0072]{"PR","X","Data/PR/",
[0073]{"Y",〃Y1",〃Data/PR/Y/","11"}
[0074]{"Y","Y2","Data/PR/Y/","12"}
[0075]{"PR","Y","Data/PR/",
[0076]{"PC","UP","Data/PC/","200"}
[0077]{"PC","LOW","Data/PC/","I"}
[0078]{"Data","PC","Data/",
[0079]{"Data","CU","Data/","37"}
[0080]{"Data","PR","Data/",
[0081]{"","Data",
[0082]通過(guò)上述實(shí)施例的表述能夠看出,本發(fā)明提供的JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的方法及系統(tǒng),不再需要經(jīng)過(guò)序列化和再處理流程,就能夠直接轉(zhuǎn)換得到一個(gè)結(jié)構(gòu)穩(wěn)定的二維數(shù)組,并且轉(zhuǎn)換得到的二維數(shù)組對(duì)任何格式的JSON數(shù)據(jù)都兼容,能夠方便后續(xù)進(jìn)行統(tǒng)一存儲(chǔ)、數(shù)據(jù)庫(kù)設(shè)計(jì)和再處理等。
[0083]如上參照附圖以示例的方式描述了根據(jù)本發(fā)明的JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的方法及系統(tǒng)。但是,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,對(duì)于上述本發(fā)明所提出的JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的方法及系統(tǒng),還可以在不脫離本
【發(fā)明內(nèi)容】
的基礎(chǔ)上做出各種改進(jìn)。因此,本發(fā)明的保護(hù)范圍應(yīng)當(dāng)由所附的權(quán)利要求書的內(nèi)容確定。
【主權(quán)項(xiàng)】
1.一種JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的方法,包括: 建立內(nèi)存數(shù)據(jù)棧,所述內(nèi)存數(shù)據(jù)棧包括屬性名稱棧和結(jié)構(gòu)字符棧; 根據(jù)所建立的內(nèi)存數(shù)據(jù)棧,以JSON數(shù)據(jù)的分隔符為界限,依次讀取所述JSON數(shù)據(jù)中的各個(gè)字符串,并根據(jù)所讀取的當(dāng)前字符串的類型,對(duì)所讀取的當(dāng)前字符串進(jìn)行二維數(shù)組的轉(zhuǎn)換,所述JSON數(shù)據(jù)中的字符串的類型包括結(jié)構(gòu)字符、屬性名稱和值對(duì),所述結(jié)構(gòu)字符包括向右結(jié)構(gòu)字符和向左結(jié)構(gòu)字符,所述二維數(shù)組包括當(dāng)前名稱和當(dāng)前名稱的值;其中, 當(dāng)所讀取的當(dāng)前字符串的類型是向右結(jié)構(gòu)字符時(shí),將所述向右結(jié)構(gòu)字符壓入所述結(jié)構(gòu)字符棧中; 當(dāng)所讀取的當(dāng)前字符串的類型是向左結(jié)構(gòu)字符時(shí),將所述結(jié)構(gòu)字符棧中的棧頂字符彈出所述結(jié)構(gòu)字符棧,并將彈出所述結(jié)構(gòu)字符棧的棧頂字符與所述向左結(jié)構(gòu)字符相匹配,當(dāng)匹配成功時(shí),以所述屬性名稱棧的棧頂字符作為二維數(shù)組的當(dāng)前名稱,以空值作為二維數(shù)組的當(dāng)前名稱的值拼接一條二維數(shù)組; 當(dāng)所讀取的當(dāng)前字符串的類型是屬性名稱時(shí),將所述屬性名稱壓入所述屬性名稱棧中; 當(dāng)所讀取的當(dāng)前字符串的類型是值對(duì)時(shí),以所述屬性名稱棧的棧頂字符作為二維數(shù)組的當(dāng)前名稱,以所讀取的值對(duì)作為二維數(shù)組的當(dāng)前名稱的值拼接一條二維數(shù)組。2.如權(quán)利要求1所述的JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的方法,其中,當(dāng)所讀取的當(dāng)前字符串的類型是值對(duì)時(shí),在以所述屬性名稱棧的棧頂字符作為二維數(shù)組的當(dāng)前名稱,以所讀取的值對(duì)作為所述當(dāng)前名稱的值拼接一條二維數(shù)組完畢后,將所述屬性名稱棧的棧頂字符彈出所述屬性名稱棧。3.如權(quán)利要求1所述的JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的方法,其中,當(dāng)彈出所述結(jié)構(gòu)字符棧的棧頂字符與所述向左結(jié)構(gòu)字符匹配不成功時(shí),返回所述JSON數(shù)據(jù)格式錯(cuò)誤的信息。4.如權(quán)利要求1所述的JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的方法,其中,所述二維數(shù)組還包括當(dāng)前名稱的上級(jí)名稱和當(dāng)前名稱的路徑;其中, 所述當(dāng)前名稱為所述屬性名稱棧的棧頂字符;所述上級(jí)名稱為所述屬性名稱棧的棧頂字符的前一級(jí)字符;所述當(dāng)前名稱的路徑由所述屬性名稱棧的棧底字符依次向所述屬性名稱棧的棧頂字符拼接而成,但不包括所述屬性名稱棧的棧頂字符。5.如權(quán)利要求1所述的JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的方法,其中,所述JSON數(shù)據(jù)的分隔符為冒號(hào)或者逗號(hào); 所述界限是指在讀取到所述JSON數(shù)據(jù)的分隔符時(shí)即認(rèn)為此次字符串讀取完畢。6.一種JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的系統(tǒng),包括: 數(shù)據(jù)棧建立單元,用于建立內(nèi)存數(shù)據(jù)棧,所述內(nèi)存數(shù)據(jù)棧包括屬性名稱棧和結(jié)構(gòu)字符棧; 轉(zhuǎn)換單元,用于根據(jù)所述數(shù)據(jù)棧建立單元所建立的內(nèi)存數(shù)據(jù)棧,以JSON數(shù)據(jù)的分隔符為界限,依次讀取JSON數(shù)據(jù)中的各個(gè)字符串,并根據(jù)所讀取的當(dāng)前字符串的類型,對(duì)所讀取的當(dāng)前字符串進(jìn)行二維數(shù)組轉(zhuǎn)換,所述JSON數(shù)據(jù)中的字符串的類型包括結(jié)構(gòu)字符、屬性名稱和值對(duì),所述結(jié)構(gòu)字符包括向左結(jié)構(gòu)字符和向右結(jié)構(gòu)字符,所述二維數(shù)組包括當(dāng)前名稱和當(dāng)前名稱的值;其中,所述轉(zhuǎn)換單元進(jìn)一步包括: 入棧單元,用于將所讀取到的向右結(jié)構(gòu)字符或者屬性名稱壓入相應(yīng)的內(nèi)存數(shù)據(jù)棧中;其中,將所讀取的向右結(jié)構(gòu)字符壓入所述結(jié)構(gòu)字符棧中,將所讀取的屬性名稱壓入所述屬性名稱棧中; 結(jié)構(gòu)字符出棧單元,用于將所述結(jié)構(gòu)字符棧的棧頂字符彈出所述結(jié)構(gòu)字符棧; 拼接單元,用于根據(jù)所讀取的當(dāng)前字符串進(jìn)行二維數(shù)組的拼接;其中, 當(dāng)所讀取的當(dāng)前字符串的類型是向左結(jié)構(gòu)字符時(shí),將所述結(jié)構(gòu)字符出棧單元所彈出的棧頂字符與所述向左結(jié)構(gòu)字符相匹配,當(dāng)匹配成功時(shí),所述拼接單元以所述屬性名稱棧的棧頂字符作為二維數(shù)組的當(dāng)前名稱,以空值作為二維數(shù)組的當(dāng)前名稱的值拼接一條二維數(shù)組; 當(dāng)所讀取的當(dāng)前字符串的類型是值對(duì)時(shí),所述拼接單元以所述屬性名稱棧的棧頂字符作為二維數(shù)組的當(dāng)前名稱,以所讀取的值對(duì)作為二維數(shù)組的當(dāng)前名稱的值拼接一條二維數(shù)組。7.如權(quán)利要求6所述的JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的系統(tǒng),其中,所述轉(zhuǎn)換單元進(jìn)一步包括: 屬性名稱出棧單元,用于將所述屬性名稱棧的棧頂字符彈出所述屬性名稱棧;其中,當(dāng)所讀取的當(dāng)前字符串的類型是值對(duì)時(shí),在以所述屬性名稱棧的棧頂字符作為二維數(shù)組的當(dāng)前名稱,以所讀取的值對(duì)作為所述當(dāng)前名稱的值拼接一條二維數(shù)組完畢后,所述屬性名稱出棧單元進(jìn)行屬性名稱棧的出棧操作。8.如權(quán)利要求6所述的JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的系統(tǒng), 所述轉(zhuǎn)換單元進(jìn)一步包括: 提示單元,用于發(fā)出JSON數(shù)據(jù)格式錯(cuò)誤的提示信息;其中,當(dāng)所述結(jié)構(gòu)字符出棧單元所彈出的棧頂字符與所述向左結(jié)構(gòu)字符匹配不成功時(shí),所述提示單元發(fā)出提示信息。
【專利摘要】本發(fā)明提供一種JSON數(shù)據(jù)轉(zhuǎn)二維數(shù)組的方法及系統(tǒng),其中的方法包括:建立內(nèi)存數(shù)據(jù)棧,內(nèi)存數(shù)據(jù)棧包括屬性名稱棧和結(jié)構(gòu)字符棧;根據(jù)所建立的內(nèi)存數(shù)據(jù)棧,以JSON數(shù)據(jù)的分隔符為界限,依次讀取JSON數(shù)據(jù)中的各個(gè)字符串,并根據(jù)所讀取的當(dāng)前字符串的類型,對(duì)所讀取的當(dāng)前字符串進(jìn)行二維數(shù)組的轉(zhuǎn)換。通過(guò)本發(fā)明能夠直接轉(zhuǎn)換得到一個(gè)結(jié)構(gòu)穩(wěn)定的二維數(shù)組,并且轉(zhuǎn)換得到的二維數(shù)組對(duì)任何格式的JSON數(shù)據(jù)都兼容,能夠方便后續(xù)進(jìn)行統(tǒng)一存儲(chǔ)、數(shù)據(jù)庫(kù)設(shè)計(jì)和再處理等操作。
【IPC分類】G06F17/30
【公開號(hào)】CN105138683
【申請(qǐng)?zhí)枴緾N201510586214
【發(fā)明人】焦玉乾, 劉凱凱, 尚晶文, 張廣平, 宋永國(guó)
【申請(qǐng)人】歌爾聲學(xué)股份有限公司
【公開日】2015年12月9日
【申請(qǐng)日】2015年9月15日