您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页将具有父子关系的json数据转换成树形结构数据的方法[发明专利]

将具有父子关系的json数据转换成树形结构数据的方法[发明专利]

来源:筏尚旅游网
(19)中华人民共和国国家知识产权局

(12)发明专利申请

(10)申请公布号 CN 109460410 A(43)申请公布日 2019.03.12

(21)申请号 201811325050.1(22)申请日 2018.11.08

(71)申请人 四川长虹电器股份有限公司

地址 621000 四川省绵阳市高新区绵兴东

路35号(72)发明人 王洪贺 郭勇军 漆尧 唐军 (74)专利代理机构 四川省成都市天策商标专利

事务所 51213

代理人 刘兴亮(51)Int.Cl.

G06F 16/22(2019.01)G06F 16/25(2019.01)

权利要求书1页 说明书4页

CN 109460410 A()发明名称

将具有父子关系的json数据转换成树形结构数据的方法(57)摘要

本发明公开了将具有父子关系的json数据转换成树形结构数据的方法,包括以下步骤:A.获取json格式的数据data;B.进行第一次循环把json数据的数组整理成map形式的数组;C.第二次循环遍历json数据的数组,再利用map形式的数组,查找当前节点的父节点是否存在,如果存在就把当前节点放入到父节点的子孙列表中,如果不存在就直接放入到一个新的列表中。本发明的方法只用了两个循环遍历,从而明显缩短了数据处理时间,并且有效保证了数据处理的高效性,解决了通过递归方法处理数据存在的遍历次数多,遍历过程中时间和空间都消耗多、效率比较缓慢的问题。

CN 109460410 A

权 利 要 求 书

1/1页

1.将具有父子关系的json数据转换成树形结构数据的方法,其特征在于,包括以下步骤:

A.获取json格式的数据data;

B.进行第一次循环把json数据的数组整理成map形式的数组;C.第二次循环遍历json数据的数组,再利用map形式的数组,查找当前节点的父节点是否存在,如果存在就把当前节点放入到父节点的子孙列表中,如果不存在就直接放入到一个新的列表中。

2.根据权利要求1所述的将具有父子关系的json数据转换成树形结构数据的方法,其特征在于,所述步骤C具体包括以下步骤:

C1.对json数据的数组进行第二次循环遍历,将每一项数据和map数组联合判断是否存在子节点,若存在则进入步骤C3,否则,进入步骤C2;

C2.将该条数据写入arr空数组中,表示一级节点;C3.该条数据不是一级节点,通过map函数判断该条数据是否有子系空数组,如果没有则创建一个子系空数组并压入该条数据,如果有则直接压入该条数据,则返回的arr数组即是处理好的树形结构数据。

3.根据权利要求1所述的将具有父子关系的json数据转换成树形结构数据的方法,其特征在于,所述步骤B中把json数据的数组整理成map形式的数组时具体是将每条数据的子Id作为key值。

4.根据权利要求3所述的将具有父子关系的json数据转换成树形结构数据的方法,其特征在于,所述步骤C1中对json数据的数组进行第二次循环遍历,将每一项数据和map数组联合判断是否存在子节点时,具体是将data数据的父Id作为map数据的key值。

2

CN 109460410 A

说 明 书

1/4页

将具有父子关系的json数据转换成树形结构数据的方法

技术领域

[0001]本发明涉及数据处理技术领域,特别涉及将具有父子关系的json数据转换成树形结构数据的方法。

背景技术

[0002]树形结构是一层次的嵌套结构。一个树形结构的外层和内层有相似的结构,所以这种结构多可以递归的表示。在前端页面里往往有很多需要展示复杂关系的数据页面,比如各个省市区关系展示,党组织机构框架的展示,人员关系的展示等都需要把简单的json数据进行格式化处理以便找到层级关系,然后将层级关系展示到页面上。[0003]因为树形结构可以递归的表示,所以传统的处理数据的方式也选择了递归的方法进行处理,但是递归方法有很多缺点:

[0004]1).递归往往都是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据也都需要时间。

[0005]2).递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,如fibonacci斐波那契数列的递归实现。

[0006]3).调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。历来对数据进行排序大致有两种思想:以时间换空间,以空间换时间,原来的方法是采用递归遍历,数据量越大越慢,而且会导致浏览器崩溃。发明内容

[0007]本发明的目的是克服上述背景技术中不足,提供将具有父子关系的json数据转换成树形结构数据的方法,充分利用父节点的子ID(deptId)为子节点的父ID(parentId)这一特点,一次遍历形成map形式的数组,二次遍历根据节点关系结合map数组分离想要的树形数据结构,只用两次遍历,高效快速,解决了通过递归方法处理数据存在的遍历次数多,遍历过程中时间和空间都消耗多,效率比较缓慢的问题。[0008]为了达到上述的技术效果,本发明采取以下技术方案:[0009]将具有父子关系的json数据转换成树形结构数据的方法,包括以下步骤:[0010]A.获取json格式的数据data;

[0011]B.进行第一次循环把json数据的数组整理成map形式的数组;[0012]C.第二次循环遍历json数据的数组,再利用map形式的数组,查找当前节点的父节点是否存在,如果存在就把当前节点放入到父节点的子孙列表中,如果不存在就直接放入到一个新的列表中;

[0013]本发明的将具有父子关系的json数据转换成树形结构数据的方法中,通过充分利

3

CN 109460410 A

说 明 书

2/4页

用父节点的deptId为子节点的parentId及数组和对象都是引用传递,实际存储过程中指向同一个内存地址,其中一个的值改变了也就相当于改变了指向地址的值,这样所有指向该地址的都会随之改变的特点,先进行一次循环把json数据的数组整理成新的map形式的数组,即key为每条数据的deptId的值,value就是每条数据,再遍历原数据的数组,再利用map形式的数组,查找当前节点的父节点是否存在,如果存在就把当前节点放入到父节点的子孙列表中,如果不存在就直接放入到一个新的列表中,这样就分离出想要的树形数据结构格式,仅仅两次遍历即分离出树形数据结构,高效且耗费资源少,同时也不会因为数据量过多导致调用栈溢出的问题。[0014]进一步地,所述步骤C具体包括以下步骤:[0015]C1.对json数据的数组进行第二次循环遍历,将每一项数据和map数组联合判断是否存在子节点,若存在则进入步骤C3,否则,进入步骤C2;[0016]C2.将该条数据写入arr空数组中,表示一级节点;[0017]C3.该条数据不是一级节点,通过map函数判断该条数据是否有子系空数组,如果没有则创建一个子系空数组并压入该条数据,如果有则直接压入该条数据,则返回的arr数组即是处理好的树形结构数据。[0018]进一步地,所述步骤B中把json数据的数组整理成map形式的数组时具体是将每条数据的子Id作为key值。[0019]进一步地,所述步骤C1中对json数据的数组进行第二次循环遍历,将每一项数据和map数组联合判断是否存在子节点时,具体是将data数据的父Id作为map数据的key值。[0020]本发明与现有技术相比,具有以下的有益效果:

[0021]本发明的将具有父子关系的json数据转换成树形结构数据的方法中,充分利用父子节点id相等的关系,通过第一次循环把数据变成map数组形式,再通过第二次循环遍历,每一条数据都和map数组联合判断是否存在子节点,不存在时则将该条数据写入数组arr,表示一级节点,存在时存在则表示该条数据不是一级节点,接着通过map函数判断该条数据是否有children空数组,如果没有则创建一个空数组children,压入该条数据,如果有直接压入该条数据,这样返回的arr数组即是处理好的树形结构数据,由于只用了两个循环遍历,明显缩短了数据处理时间,并且有效保证了数据处理的高效性,解决了通过递归方法处理数据存在的遍历次数多,遍历过程中时间和空间都消耗多、效率比较缓慢的问题,具有简单、快捷、高效的优点。具体实施方式

[0022]下面结合本发明的实施例对本发明作进一步的阐述和说明。[0023]实施例:[0024]目前,将json数据格式化为树形结构数据处理的方式大多采用递归的方法,其步骤大致包括:首先,定义两个空数组,根据parentId遍历分离出数据一级父节点和其他子节点,然后,创建递归函数,进行遍历,进行判断是否是子节点,是的话放进子节点的空数组,不是放进其他子节点的空数组里,最后,判断子节点的数组长度是否大于0,大于0则递归分离。

[0025]这样一层一层分离出想要的子孙数据格式,递归法遍历次数多,遍历过程中时间

4

CN 109460410 A

说 明 书

3/4页

和空间都消耗了很多,因此效率比较缓慢,数据过多还会导致调用栈溢出。

[0026]本实施例中则将充分利用父节点的deptId为子节点的parentId的特点及数组和对象都是引用传递,实际存储过程中指向同一个内存地址,其中一个的值改变了也就相当于改变了指向地址的值,这样所有指向该地址的都会随之改变的特点,公开一种将具有父子关系的json数据转换成树形结构数据的方法,先进行一次循环把json数据的数组整理成新的map形式的数组,即key为每条数据的deptId的值,value就是每条数据,再遍历原数据的数组,再利用map形式的数组,查找当前节点的父节点是否存在,如果存在就把当前节点放入到父节点的子孙列表中,如果不存在就直接放入到一个新的列表中。[0027]这样就分离出想要的树形数据结构格式,仅仅两次遍历即分离出树形数据结构,高效且耗费资源少,同时也不会因为数据量过多导致调用栈溢出的问题。具体的,本方法的实施步骤具体如下:[0028]步骤1:获取Json格式的简单数据data。[0029]具体的,本实施例中获取的数据如下:

[0030]

5

CN 109460410 A[0031]

说 明 书

4/4页

步骤2:对data数据进行第一次循环,以每条数据的depId为key值,把数据变成map

数组形式,最终形成的map数组如下示:

1:{depId:1,parentId:0,name:\"父节点1\11:{depId:11,parentId:1,name:\"父节点11\12:{depId:12,parentId:1,name:\"父节点12\111:{depId:111,parentId:11,name:\"叶子节点111\112:{depId:112,parentId:11,name:\"叶子节点112\113:{depId:113,parentId:11,name:\"叶子节点113\114:{depId:114,parentId:11,name:\"叶子节点114\121:{depId:121,parentId:12,name:\"叶子节点121\122:{depId:122,parentId:12,name:\"叶子节点122\123:{depId:123,parentId:12,name:\"叶子节点123\124:{depId:124,parentId:12,name:\"叶子节点124\

[0032][0033][0034][0035][0036][0037][0038][0039][0040][0041][0042][0043]

步骤3:对data数据进行第二次循环遍历,用data数据的parentId作为map数据的key值,判断是否存在子节点;[0044]如果不存在,则将该条data数据放入arr空数组中;[0045]如果存在,接着判断map数组中以data数据的parentId作为map数据key值的该条数据是否有children空数组,如果没有则在map中创建一个空数组children,压入data中的该条数据,如果有直接压入data中的该条数据,这样两个遍历即得到处理好的arr树形结构数据。

[0046]由于只用了两个循环遍历,本实施例的方法明显缩短了数据处理时间,并且有效保证了数据处理的高效性。[0047]具体的,经过将本实施的方法与传统的递归方法进行测试对比,具体测试数据为智慧党建的组织机构树数据,得出本发明的技术方案所需的数据处理的时间仅为0.285888671875ms,而用递归法测得数据处理的时间为159.224853515625ms,相对于递归法,本发明的方法具有简单、快捷、高效的优点。[0048]可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。

6

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务