一种JSON数据转成树形层级数据的方法与流程

文档序号:21888451发布日期:2020-08-18 17:35阅读:2212来源:国知局
一种JSON数据转成树形层级数据的方法与流程

本发明涉及软件升级技术领域,特别涉及一种json数据转成树形层级数据的方法。



背景技术:

json(javascriptobjectnotation,js对象简谱)是一种轻量级的数据交换格式。它基于ecmascript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得json格式成为理想的数据交换语言,不仅易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在js语言中,一切都是对象。因此,任何支持的类型都可以通过json来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:

(1)对象表示为键值对;

(2)数据由逗号分隔;

(3)花括号保存对象;

(4)方括号保存数组。

任何支持的类型都可以通过json来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

对象:对象在js中是使用花括号包裹{}起来的内容,数据结构为{key1:value1,key2:value2,...}的键值对结构。在面向对象的语言中,key为对象的属性,value为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

数组:数组在js中是方括号[]包裹起来的内容,数据结构为["java","javascript","vb",...]的索引结构。在js中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

简单地说,json可以将javascript对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式。例如在php(hypertextpreprocessor)中,可以将json数据还原为数组或者一个基本对象。在用到ajax(asynchronousjavascript)时,如果需要用到数组传值,这时就需要用json将数组转化为字符串。

树形结构指的是数据元素之间存在着“一对多”的树形关系的数据结构,是一中层次的嵌套结构。且一个树形结构的外层和内层有相似的结构,所以这种结构多可以递归的表示。

经典数据结构中的各种树状图是一种典型的树形结构:一颗树可以简单的表示为根,左子树,右子树。左子树和右子树又有自己的子树。

在树形结构中包括根节点和叶节点。树根结点没有前驱结点,其余每个结点有且只有一个前驱结点。叶子结点没有后续结点,其余每个结点的后续节点数可以是一个也可以是多个。

另外,数学统计中的树形结构可表示层次关系,还可以在其他许多方面表示从属关系或并列关系。

在实际应用中,文件夹、组织架构、生物分类、国家地区等等,用户日常应用中的大多数数据结构都是采用树形结构。因此,将json数据转成树形层级数据是数据应用中很重要的一环。

针对上述问题,本发明提出了一种json数据转成树形层级数据的方法。



技术实现要素:

本发明为了弥补现有技术的缺陷,提供了一种简单高效的json数据转成树形层级数据的方法。

本发明是通过如下技术方案实现的:

一种json数据转成树形层级数据的方法,其特征在于:首先将多层json数据源转成单层json数据源或者map对象,然后通过生成节点队列,最后遍历全部节点,组装成树形层级数据即可。

该json数据转成树形层级数据的方法,前端主动调取后端接口,从而获取前端元素组件相关数据。

具体包括以下步骤:

第一步,基于需要生成的树形层级数据,声明树形层级数据节点的类型;

第二步,声明一个map对象或者空对象,通过遍历源数据全部属性,将多层json源数据转成单层map对象;

第三步,遍历json数据源的第一层属性,将该层属性名作为根节点的唯一标识,遍历队列中所有节点,多层json数据即可转成树形层级数据。

所述第一步中,形层级数据节点的类型必须有辨识节点唯一性的属性以及表示节点的父子关系的属性。

采用id或key值作为所述树形层级数据节点的唯一标识,采用children属性作为表示节点的父子关系的属性。

当json数据的属性名发生重复时,选取多层json数据的属性名的拼接作为唯一标识。

所述第二步中,map对象的key值为树节点的标识,map对象的key值对应的值为该节点的子节点数组;通过遍历该属性下的全部属性,依据声明的树形层级数据节点的类型,组装成节点放入子节点数组中;通过递归的形式遍历源数据全部属性,最终将多层json源数据转成map对象的形式。

所述第三步中,声明一个待检查的节点队列,并向待检查的节点队列中添加根节点,然后遍历检查队列中的节点;利用上一步中获取的map对象,根据被检查的节点的唯一标识,获取map对象中对应的value值,也就是子节点数组;将获取的子节点数组给被检查节点的children属性赋值;最后将检查过的节点在队列中去除,将被检查节点的子节点添加到队列末端。

本发明的有益效果是:该json数据转成树形层级数据的方法,操作简单,能够将多层json数据源组装成树形层级数据,极大的提高了多层json数据源的应用效率,适宜推广应用。

附图说明

附图1为本发明json数据转成树形层级数据的方法示意图。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合实施例,对本发明进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

map对象保存键/值对,是键/值对的集合。任何值(对象或者原始值)都可以作为一个键或一个值。map结构提供了“值—值”的对应。

该json数据转成树形层级数据的方法,首先将多层json数据源转成单层json数据源或者map对象,然后通过生成节点队列,最后遍历全部节点,组装成树形层级数据即可。

该json数据转成树形层级数据的方法,前端主动调取后端接口,从而获取前端元素组件相关数据。

具体包括以下步骤:

第一步,基于需要生成的树形层级数据,声明树形层级数据节点的类型;

第二步,声明一个map对象或者空对象,通过遍历源数据全部属性,将多层json源数据转成单层map对象;

第三步,遍历json数据源的第一层属性,将该层属性名作为根节点的唯一标识,遍历队列中所有节点,多层json数据即可转成树形层级数据。

所述第一步中,形层级数据节点的类型必须有辨识节点唯一性的属性以及表示节点的父子关系的属性。

采用id或key值作为所述树形层级数据节点的唯一标识,采用children属性作为表示节点的父子关系的属性。

当json数据的属性名发生重复时,选取多层json数据的属性名的拼接作为唯一标识。

所述map的key值可以是任意值,包括函数、对象、基本类型。map中的key值是有序的,因此当对key值进行遍历时,map对象是按插入的顺序返回键值。

所述第二步中,map对象的key值为树节点的标识,map对象的key值对应的值为该节点的子节点数组;通过遍历该属性下的全部属性,依据声明的树形层级数据节点的类型,组装成节点放入子节点数组中;通过递归的形式遍历源数据全部属性,最终将多层json源数据转成map对象的形式。

所述第三步中,声明一个待检查的节点队列,并向待检查的节点队列中添加根节点,然后遍历检查队列中的节点;利用上一步中获取的map对象,根据被检查的节点的唯一标识,获取map对象中对应的value值,也就是子节点数组;将获取的子节点数组给被检查节点的children属性赋值;最后将检查过的节点在队列中去除,将被检查节点的子节点添加到队列末端。

以上所述的实施例,只是本发明具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1