[發(fā)明專利]將具有父子關(guān)系的json數(shù)據(jù)轉(zhuǎn)換成樹形結(jié)構(gòu)數(shù)據(jù)的方法在審
| 申請(qǐng)?zhí)枺?/td> | 201811325050.1 | 申請(qǐng)日: | 2018-11-08 |
| 公開(公告)號(hào): | CN109460410A | 公開(公告)日: | 2019-03-12 |
| 發(fā)明(設(shè)計(jì))人: | 王洪賀;郭勇軍;漆堯;唐軍 | 申請(qǐng)(專利權(quán))人: | 四川長虹電器股份有限公司 |
| 主分類號(hào): | G06F16/22 | 分類號(hào): | G06F16/22;G06F16/25 |
| 代理公司: | 四川省成都市天策商標(biāo)專利事務(wù)所 51213 | 代理人: | 劉興亮 |
| 地址: | 621000 四*** | 國省代碼: | 四川;51 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 數(shù)組 樹形結(jié)構(gòu)數(shù)據(jù) 父子關(guān)系 數(shù)據(jù)處理 次循環(huán) 父節(jié)點(diǎn) 遍歷 放入 遍歷過程 處理數(shù)據(jù) 循環(huán)遍歷 高效性 再利用 轉(zhuǎn)換 遞歸 查找 消耗 保證 | ||
本發(fā)明公開了將具有父子關(guān)系的json數(shù)據(jù)轉(zhuǎn)換成樹形結(jié)構(gòu)數(shù)據(jù)的方法,包括以下步驟:A.獲取json格式的數(shù)據(jù)data;B.進(jìn)行第一次循環(huán)把json數(shù)據(jù)的數(shù)組整理成map形式的數(shù)組;C.第二次循環(huán)遍歷json數(shù)據(jù)的數(shù)組,再利用map形式的數(shù)組,查找當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)是否存在,如果存在就把當(dāng)前節(jié)點(diǎn)放入到父節(jié)點(diǎn)的子孫列表中,如果不存在就直接放入到一個(gè)新的列表中。本發(fā)明的方法只用了兩個(gè)循環(huán)遍歷,從而明顯縮短了數(shù)據(jù)處理時(shí)間,并且有效保證了數(shù)據(jù)處理的高效性,解決了通過遞歸方法處理數(shù)據(jù)存在的遍歷次數(shù)多,遍歷過程中時(shí)間和空間都消耗多、效率比較緩慢的問題。
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別涉及將具有父子關(guān)系的json數(shù)據(jù)轉(zhuǎn)換成樹形結(jié)構(gòu)數(shù)據(jù)的方法。
背景技術(shù)
樹形結(jié)構(gòu)是一層次的嵌套結(jié)構(gòu)。一個(gè)樹形結(jié)構(gòu)的外層和內(nèi)層有相似的結(jié)構(gòu),所以這種結(jié)構(gòu)多可以遞歸的表示。在前端頁面里往往有很多需要展示復(fù)雜關(guān)系的數(shù)據(jù)頁面,比如各個(gè)省市區(qū)關(guān)系展示,黨組織機(jī)構(gòu)框架的展示,人員關(guān)系的展示等都需要把簡單的json數(shù)據(jù)進(jìn)行格式化處理以便找到層級(jí)關(guān)系,然后將層級(jí)關(guān)系展示到頁面上。
因?yàn)闃湫谓Y(jié)構(gòu)可以遞歸的表示,所以傳統(tǒng)的處理數(shù)據(jù)的方式也選擇了遞歸的方法進(jìn)行處理,但是遞歸方法有很多缺點(diǎn):
1).遞歸往往都是函數(shù)調(diào)用自身,而函數(shù)調(diào)用是有時(shí)間和空間的消耗的:每一次函數(shù)調(diào)用,都需要在內(nèi)存棧中分配空間以保存參數(shù)、返回地址以及臨時(shí)變量,而往棧中壓入數(shù)據(jù)和彈出數(shù)據(jù)也都需要時(shí)間。
2).遞歸中很多計(jì)算都是重復(fù)的,由于其本質(zhì)是把一個(gè)問題分解成兩個(gè)或者多個(gè)小問題,多個(gè)小問題存在相互重疊的部分,則存在重復(fù)計(jì)算,如fibonacci斐波那契數(shù)列的遞歸實(shí)現(xiàn)。
3).調(diào)用??赡軙?huì)溢出,其實(shí)每一次函數(shù)調(diào)用會(huì)在內(nèi)存棧中分配空間,而每個(gè)進(jìn)程的棧的容量是有限的,當(dāng)調(diào)用的層次太多時(shí),就會(huì)超出棧的容量,從而導(dǎo)致棧溢出。歷來對(duì)數(shù)據(jù)進(jìn)行排序大致有兩種思想:以時(shí)間換空間,以空間換時(shí)間,原來的方法是采用遞歸遍歷,數(shù)據(jù)量越大越慢,而且會(huì)導(dǎo)致瀏覽器崩潰。
發(fā)明內(nèi)容
本發(fā)明的目的是克服上述背景技術(shù)中不足,提供將具有父子關(guān)系的json數(shù)據(jù)轉(zhuǎn)換成樹形結(jié)構(gòu)數(shù)據(jù)的方法,充分利用父節(jié)點(diǎn)的子ID(deptId)為子節(jié)點(diǎn)的父ID(parentId)這一特點(diǎn),一次遍歷形成map形式的數(shù)組,二次遍歷根據(jù)節(jié)點(diǎn)關(guān)系結(jié)合map數(shù)組分離想要的樹形數(shù)據(jù)結(jié)構(gòu),只用兩次遍歷,高效快速,解決了通過遞歸方法處理數(shù)據(jù)存在的遍歷次數(shù)多,遍歷過程中時(shí)間和空間都消耗多,效率比較緩慢的問題。
為了達(dá)到上述的技術(shù)效果,本發(fā)明采取以下技術(shù)方案:
將具有父子關(guān)系的json數(shù)據(jù)轉(zhuǎn)換成樹形結(jié)構(gòu)數(shù)據(jù)的方法,包括以下步驟:
A.獲取json格式的數(shù)據(jù)data;
B.進(jìn)行第一次循環(huán)把json數(shù)據(jù)的數(shù)組整理成map形式的數(shù)組;
C.第二次循環(huán)遍歷json數(shù)據(jù)的數(shù)組,再利用map形式的數(shù)組,查找當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)是否存在,如果存在就把當(dāng)前節(jié)點(diǎn)放入到父節(jié)點(diǎn)的子孫列表中,如果不存在就直接放入到一個(gè)新的列表中;
本發(fā)明的將具有父子關(guān)系的json數(shù)據(jù)轉(zhuǎn)換成樹形結(jié)構(gòu)數(shù)據(jù)的方法中,通過充分利用父節(jié)點(diǎn)的deptId為子節(jié)點(diǎn)的parentId及數(shù)組和對(duì)象都是引用傳遞,實(shí)際存儲(chǔ)過程中指向同一個(gè)內(nèi)存地址,其中一個(gè)的值改變了也就相當(dāng)于改變了指向地址的值,這樣所有指向該地址的都會(huì)隨之改變的特點(diǎn),先進(jìn)行一次循環(huán)把json數(shù)據(jù)的數(shù)組整理成新的map形式的數(shù)組,即key為每條數(shù)據(jù)的deptId的值,value就是每條數(shù)據(jù),再遍歷原數(shù)據(jù)的數(shù)組,再利用map形式的數(shù)組,查找當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)是否存在,如果存在就把當(dāng)前節(jié)點(diǎn)放入到父節(jié)點(diǎn)的子孫列表中,如果不存在就直接放入到一個(gè)新的列表中,這樣就分離出想要的樹形數(shù)據(jù)結(jié)構(gòu)格式,僅僅兩次遍歷即分離出樹形數(shù)據(jù)結(jié)構(gòu),高效且耗費(fèi)資源少,同時(shí)也不會(huì)因?yàn)閿?shù)據(jù)量過多導(dǎo)致調(diào)用棧溢出的問題。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于四川長虹電器股份有限公司,未經(jīng)四川長虹電器股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201811325050.1/2.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 源代碼作成支援程序及源代碼作成支援方法
- 一種實(shí)現(xiàn)樹形結(jié)構(gòu)的方法及裝置
- 電力管理軟件的基礎(chǔ)檔案樹形結(jié)構(gòu)的生成方法
- 樹形結(jié)構(gòu)數(shù)據(jù)顯示方法與裝置
- 一種基于Flash技術(shù)的帶復(fù)選框樹形結(jié)構(gòu)目錄構(gòu)建方法及裝置
- 基于樹形結(jié)構(gòu)的過濾方法與裝置
- 從樹形數(shù)據(jù)結(jié)構(gòu)生成切片數(shù)據(jù)
- 樹形結(jié)構(gòu)數(shù)據(jù)的存儲(chǔ)方法、電子設(shè)備、存儲(chǔ)介質(zhì)及系統(tǒng)
- 一種數(shù)據(jù)存儲(chǔ)方法、裝置、存儲(chǔ)介質(zhì)及服務(wù)器
- 樹形結(jié)構(gòu)數(shù)據(jù)的處理方法、裝置、設(shè)備及可讀存儲(chǔ)介質(zhì)
- 時(shí)間維受限的三維虛擬SPIHT樹組織方法
- 自動(dòng)生成詞條層次
- 優(yōu)化的移動(dòng)終端應(yīng)用程序自動(dòng)化測(cè)試方法和系統(tǒng)
- 一種興趣點(diǎn)父子關(guān)系的建立方法及裝置
- 一種S57電子海圖面域顏色的快速填充方法
- 一種SolrCloud配置文件修改方法、裝置及系統(tǒng)
- 興趣點(diǎn)父子關(guān)系的建立方法、裝置、存儲(chǔ)介質(zhì)及處理器
- 父子關(guān)系元素查找方法
- 基于父子關(guān)系驗(yàn)證的三方解密方法
- 面向工業(yè)控制的功能設(shè)計(jì)方法和系統(tǒng)
- 數(shù)據(jù)處理設(shè)備,數(shù)據(jù)處理方法,和數(shù)據(jù)處理程序
- 數(shù)據(jù)處理電路、數(shù)據(jù)處理裝置、數(shù)據(jù)處理方法、數(shù)據(jù)處理控制方法
- 數(shù)據(jù)處理設(shè)備、數(shù)據(jù)處理方法和數(shù)據(jù)處理程序
- 數(shù)據(jù)處理裝置、數(shù)據(jù)處理方法及數(shù)據(jù)處理程序
- 數(shù)據(jù)處理裝置、數(shù)據(jù)處理方法及計(jì)算機(jī)可讀取的記錄介質(zhì)
- 數(shù)據(jù)處理裝置、數(shù)據(jù)處理方法和數(shù)據(jù)處理程序
- 數(shù)據(jù)處理裝置、數(shù)據(jù)處理方法和數(shù)據(jù)處理程序
- 數(shù)據(jù)處理裝置、數(shù)據(jù)處理方法以及數(shù)據(jù)處理程序
- 數(shù)據(jù)處理裝置、數(shù)據(jù)處理方法以及數(shù)據(jù)處理程序
- 數(shù)據(jù)處理裝置、數(shù)據(jù)處理方法和數(shù)據(jù)處理程序





