CN110928939A - 一种基于树形结构的Sql结果集向Json数据转换的方法 - Google Patents

一种基于树形结构的Sql结果集向Json数据转换的方法 Download PDF

Info

Publication number
CN110928939A
CN110928939A CN201911145734.8A CN201911145734A CN110928939A CN 110928939 A CN110928939 A CN 110928939A CN 201911145734 A CN201911145734 A CN 201911145734A CN 110928939 A CN110928939 A CN 110928939A
Authority
CN
China
Prior art keywords
result set
tree
node number
value pair
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201911145734.8A
Other languages
English (en)
Inventor
田大贺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Software Co Ltd
Original Assignee
Inspur Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Software Co Ltd filed Critical Inspur Software Co Ltd
Priority to CN201911145734.8A priority Critical patent/CN110928939A/zh
Publication of CN110928939A publication Critical patent/CN110928939A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/248Presentation of query results

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于树形结构的Sql结果集向Json数据转换的方法,属于数据格式转换技术领域。本发明的基于树形结构的Sql结果集向Json数据转换的方法,该方法获取sql结果集,定义一个字符串变量root,同时引入一个键值对数组,其中主键为节点编号,内容为该节点的直属子节点集合,继续循环钻取后续数据,若节点编号已存在,则替换除节点编号和children之外的属性,若节点编号不存在,则把数据封装后存入到键值对数组中,插入时同样缓存父节点编号。该发明的基于树形结构的Sql结果集向Json数据转换的方法能有效的解决sql结果集格式数据的过渡问题,具有很好的推广应用价值。

Description

一种基于树形结构的Sql结果集向Json数据转换的方法
技术领域
本发明涉及数据格式转换技术领域,具体提供一种基于树形结构的Sql结果集向Json数据转换的方法。
背景技术
树是一种十分重要的数据结构,在实际的生活中也有着广泛的应用,比如人事管理、组织机构等等。Web应用中对树结构的引用一般采用json格式,这种格式在形式上保留了树节点一对多的关系特点。而在关系型数据库中,sql结果集中的每一行记录形式上独立,行记录之间呈线性排列,无法体现行记录之间的层次关系。在web应用程序开发时,首先获取到的便是从数据库中选出的sql结果集,我们要构建一棵树,必须要把这种线性的结果集转化为具有层次性的json格式数据,这是一个复杂的过程。
介于sql结果集数据格式与webtree控件所需要的json数据格式不一致的矛盾,需要一种数据格式转换算法,从而有效的解决问题。
发明内容
本发明的技术任务是针对上述存在的问题,提供一种能够有效的解决sql结果集格式数据的过渡问题,并对webUI开发者高效地创建tree相关的web空间提供解决方案的基于树形结构的Sql结果集向Json数据转换的方法。
为实现上述目的,本发明提供了如下技术方案:
一种基于树形结构的Sql结果集向Json数据转换的方法,该方法获取sql结果集,定义一个字符串变量root,同时引入一个键值对数组,其中主键为节点编号,内容为该节点的直属子节点集合,继续循环钻取后续数据,若节点编号已存在,则替换除节点编号和children之外的属性,若节点编号不存在,则把数据封装后存入到键值对数组中,插入时同样缓存父节点编号,若父节点编号为空,则把父节点编号存入root,若父节点编号不为空,在键值对数组中找到节点编号为父节点编号的元素,若找不到,则添加一个主键为父节点编号的空节点,再将当前节点编号赋值到其父节点编号的children属性中,构建起树;从字符串root的节点集合开始,根据存有所有节点基础数据的键值对数组,对每一个树节点进行迭代赋值,生成json数据串。
作为优选,该基于树形结构的Sql结果集向Json数据转换的方法具体包括以下步骤:
S1、从数据库读取到待展示的sql结果集,将结果集的每个记录路径字段数据转换为双亲表示法;
S2、采用步骤S1得到的结果集,定义字符串变量root,并引入一个键值对数组kv,对结果集的每行记录做处理,构建起树;
S3、根据构建的树,对每一个树节点进行迭代赋值,生成json数据集。
作为优选,步骤S2中,初始化字符串变量root和键值对数组kv为空,则开始遍历sql结果集。
作为优选,取出行记录x,在键值对数组kv中查找与x对应的原始y,若存在y,在键值对kv中覆盖y的除id和children之外的属性,否则将行记录x保存到kv中。
作为优选,判断x的父节点id是否为空,若为空,则将x的id添加到root中,并继续取出行记录x,在键值对数组kv中查找与x对应的原始y,否则在键值对数组kv中查找id与x的父节点id相同的元素z。
作为优选,判断元素z是否存在,若存在则将x的id添加到z的children属性的末尾,否则添加一个id为x的父节点id,children为x的id,属性为空的新元素到键值对数组kv中。
作为优选,判断是否存在下一行记录,若存在则继续取出行记录x,在键值对数组kv中查找与x对应的原始y,否则结束。
作为优选,所述sql数据集包括但不限于关系型数据库中java、.net、C、C++得到的结果集。
与现有技术相比,本发明的基于树形结构的Sql结果集向Json数据转换的方法具有以下突出的有益效果:所述基于树形结构的Sql结果集向Json数据转换的方法解决了在关系型数据库中的线性数据转化为具有层次性数据的难题,在使用全国省市县乡的数据来构建,原始数据有44129条,在装有win7系统、内存为4G的机子上,java环境下运行,构建该树的四级结构需要不到1秒的时间,为webUI设计者创建Tree相关的控件带来很大的方便,具有良好的推广应用价值。
附图说明
图1是本发明所述基于树形结构的Sql结果集向Json数据转换的方法的流程图。
具体实施方式
下面将结合附图和实施例,对本发明的基于树形结构的Sql结果集向Json数据转换的方法作进一步详细说明。
实施例
本发明的基于树形结构的Sql结果集向Json数据转换的方法,获取sql结果集,定义一个字符串变量root,同时引入一个键值对数组,其中主键为节点编号,内容为该节点的直属子节点集合,继续循环钻取后续数据,若节点编号已存在,则替换除节点编号和children之外的属性,若节点编号不存在,则把数据封装后存入到键值对数组中,插入时同样缓存父节点编号,若父节点编号为空,则把父节点编号存入root,若父节点编号不为空,在键值对数组中找到节点编号为父节点编号的元素,若找不到,则添加一个主键为父节点编号的空节点,再将当前节点编号赋值到其父节点编号的children属性中,构建起树;从字符串root的节点集合开始,根据存有所有节点基础数据的键值对数组,对每一个树节点进行迭代赋值,生成json数据串。其中,sql数据集包括但不限于关系型数据库中java、.net、C、C++得到的结果集。
如图1所示,该基于树形结构的Sql结果集向Json数据转换的方法具体包括以下步骤:
S1、从数据库读取到待展示的sql结果集,将结果集的每个记录路径字段数据转换为双亲表示法。
S2、采用步骤S1得到的结果集,定义字符串变量root,并引入一个键值对数组kv,对结果集的每行记录做处理,构建起树。
初始化字符串变量root和键值对数组kv为空,则开始遍历sql结果集。取出行记录x,在键值对数组kv中查找与x对应的原始y,若存在y,在键值对kv中覆盖y的除id和children之外的属性,否则将行记录x保存到kv中。判断x的父节点id是否为空,若为空,则将x的id添加到root中,并继续取出行记录x,在键值对数组kv中查找与x对应的原始y,否则在键值对数组kv中查找id与x的父节点id相同的元素z。判断元素z是否存在,若存在则将x的id添加到z的children属性的末尾,否则添加一个id为x的父节点id,children为x的id,属性为空的新元素到键值对数组kv中。判断是否存在下一行记录,若存在则继续取出行记录x,在键值对数组kv中查找与x对应的原始y,否则结束。
S3、根据构建的树,对每一个树节点进行迭代赋值,生成json数据集。
本发明的基于树形结构的Sql结果集向Json数据转换的方法的一个具体实施例如下:
通过从关系型数据读取到待展示的sql线性结果集,随机选取一行记录,比如id=6,取其path字段值”2—5—6”,根据路径表示法path字段的取值规则可以知道,这棵树存在id=2的根节点。存在id=5的父节点。在选取id=2的记录时发现其path字段值就是它的id这表示它本身就是一个根节点,它的父节点就为空,即null。以此类推,可以将数据集的每个记录path字段变成表2中的parentid字段,即把数据转换为双亲表示法。
采用上述步骤得到的sql数据集,首先定义一个字符串变量root,用于记录所有根节点id的集合。同时引入一个键值对数组kv(String id,object node)实际上kv相当于一个小型的数据库。其中,id即节点编号,node表示该节点的直隶子节点集合。然后遍历上述步骤中的行记录,例如id=8首先试图在键值对数组kv中获取id=8的元素,如果存在先替换该元素中除id和chilren之外的其他属性,缓存parentId(=7)。如果不存在将这个元素按照数据集格式封装并存入kv中,即插入(“8”,node)插入之前同样缓存parentld。若parentId为空,将parentld添加到root,若不为空在kv中找出id为parentId的元素,如果找不到,添加一个id为parentId(=7)的空节点。然后再将当前节点的id添加赋值到其父节点的children属性里。数据集的每行记录做出这样的处理后,一棵树即被构建起来。在树构建好以后,从字符串root中的id集合开始,根据存有所有树节点基础数据的kv,对每一个树节点进行迭代赋值,最终生成目标格式json数据串。
以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

Claims (8)

1.一种基于树形结构的Sql结果集向Json数据转换的方法,其特征在于:该方法获取sql结果集,定义一个字符串变量root,同时引入一个键值对数组,其中主键为节点编号,内容为该节点的直属子节点集合,继续循环钻取后续数据,若节点编号已存在,则替换除节点编号和children之外的属性,若节点编号不存在,则把数据封装后存入到键值对数组中,插入时同样缓存父节点编号,若父节点编号为空,则把父节点编号存入root,若父节点编号不为空,在键值对数组中找到节点编号为父节点编号的元素,若找不到,则添加一个主键为父节点编号的空节点,再将当前节点编号赋值到其父节点编号的children属性中,构建起树;从字符串root的节点集合开始,根据存有所有节点基础数据的键值对数组,对每一个树节点进行迭代赋值,生成json数据串。
2.根据权利要求1所述的基于树形结构的Sql结果集向Json数据转换的方法,其特征在于:该方法具体包括以下步骤:
S1、从数据库读取到待展示的sql结果集,将结果集的每个记录路径字段数据转换为双亲表示法;
S2、采用步骤S1得到的结果集,定义字符串变量root,并引入一个键值对数组kv,对结果集的每行记录做处理,构建起树;
S3、根据构建的树,对每一个树节点进行迭代赋值,生成json数据集。
3.根据权利要求2所述的基于树形结构的Sql结果集向Json数据转换的方法,其特征在于:步骤S2中,初始化字符串变量root和键值对数组kv为空,则开始遍历sql结果集。
4.根据权利要求3所述的基于树形结构的Sql结果集向Json数据转换的方法,其特征在于:取出行记录x,在键值对数组kv中查找与x对应的原始y,若存在y,在键值对kv中覆盖y的除id和children之外的属性,否则将行记录x保存到kv中。
5.根据权利要求4所述的基于树形结构的Sql结果集向Json数据转换的方法,其特征在于:判断x的父节点id是否为空,若为空,则将x的id添加到root中,并继续取出行记录x,在键值对数组kv中查找与x对应的原始y,否则在键值对数组kv中查找id与x的父节点id相同的元素z。
6.根据权利要求5所述的基于树形结构的Sql结果集向Json数据转换的方法,其特征在于:判断元素z是否存在,若存在则将x的id添加到z的children属性的末尾,否则添加一个id为x的父节点id,children为x的id,属性为空的新元素到键值对数组kv中。
7.根据权利要求6所述的基于树形结构的Sql结果集向Json数据转换的方法,其特征在于:判断是否存在下一行记录,若存在则继续取出行记录x,在键值对数组kv中查找与x对应的原始y,否则结束。
8.根据权利要求7所述的基于树形结构的Sql结果集向Json数据转换的方法,其特征在于:所述sql数据集包括但不限于关系型数据库中java、.net、C、C++得到的结果集。
CN201911145734.8A 2019-11-21 2019-11-21 一种基于树形结构的Sql结果集向Json数据转换的方法 Pending CN110928939A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911145734.8A CN110928939A (zh) 2019-11-21 2019-11-21 一种基于树形结构的Sql结果集向Json数据转换的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911145734.8A CN110928939A (zh) 2019-11-21 2019-11-21 一种基于树形结构的Sql结果集向Json数据转换的方法

Publications (1)

Publication Number Publication Date
CN110928939A true CN110928939A (zh) 2020-03-27

Family

ID=69851427

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911145734.8A Pending CN110928939A (zh) 2019-11-21 2019-11-21 一种基于树形结构的Sql结果集向Json数据转换的方法

Country Status (1)

Country Link
CN (1) CN110928939A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112039990A (zh) * 2020-08-31 2020-12-04 广州品唯软件有限公司 数据钻取方法、代理服务器、服务调用系统及介质
CN112559527A (zh) * 2020-12-15 2021-03-26 武汉大学 一种基于多叉树节点关系匹配的数据转换方法
CN112860692A (zh) * 2021-01-29 2021-05-28 城云科技(中国)有限公司 一种数据库表结构转换方法、装置及其电子设备
CN112905687A (zh) * 2021-03-26 2021-06-04 深圳壹账通智能科技有限公司 数据转换方法、装置、电子设备及存储介质
CN114281823A (zh) * 2021-12-17 2022-04-05 北京百度网讯科技有限公司 表格处理方法、装置、设备、存储介质及产品

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102446221A (zh) * 2011-12-22 2012-05-09 南京联创科技集团股份有限公司 Bs结构软件中的动态树型结构目录检索方法
CN109460410A (zh) * 2018-11-08 2019-03-12 四川长虹电器股份有限公司 将具有父子关系的json数据转换成树形结构数据的方法
US20190102389A1 (en) * 2017-10-04 2019-04-04 Dell Products Lp Storing and processing json documents in a sql database table

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102446221A (zh) * 2011-12-22 2012-05-09 南京联创科技集团股份有限公司 Bs结构软件中的动态树型结构目录检索方法
US20190102389A1 (en) * 2017-10-04 2019-04-04 Dell Products Lp Storing and processing json documents in a sql database table
CN109460410A (zh) * 2018-11-08 2019-03-12 四川长虹电器股份有限公司 将具有父子关系的json数据转换成树形结构数据的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
方耀耀;: "一种基于树形结构的Sql结果集向Json数据的转换算法" *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112039990A (zh) * 2020-08-31 2020-12-04 广州品唯软件有限公司 数据钻取方法、代理服务器、服务调用系统及介质
CN112559527A (zh) * 2020-12-15 2021-03-26 武汉大学 一种基于多叉树节点关系匹配的数据转换方法
CN112559527B (zh) * 2020-12-15 2022-06-07 武汉大学 一种基于多叉树节点关系匹配的数据转换方法
CN112860692A (zh) * 2021-01-29 2021-05-28 城云科技(中国)有限公司 一种数据库表结构转换方法、装置及其电子设备
CN112860692B (zh) * 2021-01-29 2023-07-25 城云科技(中国)有限公司 一种数据库表结构转换方法、装置及其电子设备
CN112905687A (zh) * 2021-03-26 2021-06-04 深圳壹账通智能科技有限公司 数据转换方法、装置、电子设备及存储介质
CN114281823A (zh) * 2021-12-17 2022-04-05 北京百度网讯科技有限公司 表格处理方法、装置、设备、存储介质及产品
CN114281823B (zh) * 2021-12-17 2023-08-29 北京百度网讯科技有限公司 表格处理方法、装置、设备、存储介质及产品
US11954084B2 (en) 2021-12-17 2024-04-09 Beijing Baidu Netcom Science Technology Co., Ltd. Method and apparatus for processing table, device, and storage medium

Similar Documents

Publication Publication Date Title
CN110928939A (zh) 一种基于树形结构的Sql结果集向Json数据转换的方法
US9087138B2 (en) Method for representing and storing hierarchical data in a columnar format
Willard et al. Adding range restriction capability to dynamic data structures
US9330116B2 (en) Determining hierarchical paths to nodes
US7263525B2 (en) Query processing method for searching XML data
US6862599B2 (en) Software-based methodology for the storage and retrieval of diverse information
JP4476813B2 (ja) 任意に大きな文書内のデータへのスケーラブルなアクセス
US7827219B2 (en) Method for encoding, traversing, manipulating and querying a tree
RU2507574C2 (ru) Постраничное разбиение иерархических данных
US7698257B2 (en) Apparatus and method for recursively rationalizing data source queries
CN102768674B (zh) 一种基于路径结构的xml数据存储方法
WO2015010509A1 (zh) 一种基于一维线性空间实现Trie树的词典检索方法
US8543614B2 (en) Packing nodes into records to store XML XQuery data model and other hierarchically structured data
CN100565508C (zh) 结构化文档管理设备、搜索设备、存储和搜索方法
Lee et al. Incremental and interactive mining of web traversal patterns
CN102411580A (zh) 可扩展标记语言文档的检索方法及装置
CN113721862B (zh) 数据处理方法及装置
US7548926B2 (en) High performance navigator for parsing inputs of a message
CN113590894A (zh) 一种动态高效的遥感影像元数据入库检索方法
CN109933589B (zh) 用于数据汇总的基于ElasticSearch聚合运算结果的数据结构转换方法
CN114168591A (zh) 寻找树形结构数据路径节点的方法
CN115705313A (zh) 一种数据处理方法、装置、设备及计算机可读存储介质
CN110309214A (zh) 一种指令执行方法及其设备、存储介质、服务器
CN115840751B (zh) 一种新型树状数据的编码方法
CN109376248B (zh) 基于增量学习的知识库构建及偏序结构图生成方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination