CN110059085B - 一种面向Web 2.0的JSON数据解析与建模方法 - Google Patents
一种面向Web 2.0的JSON数据解析与建模方法 Download PDFInfo
- Publication number
- CN110059085B CN110059085B CN201910201420.9A CN201910201420A CN110059085B CN 110059085 B CN110059085 B CN 110059085B CN 201910201420 A CN201910201420 A CN 201910201420A CN 110059085 B CN110059085 B CN 110059085B
- Authority
- CN
- China
- Prior art keywords
- value
- node
- data
- array
- type
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种面向Web 2.0的JSON数据解析与建模方法,包括以下步骤:第一步:定义元数据树MDT,包括根节点TRoot、索引节点INode、数据节点DNode,同时用深度level来表示节点在树结构中的层数,根节点默认为第一层,即level=1;第二步:读取调用的REST API所返回的JSON数据,将JSON数据集ds作为建模算法的输入,对ds进行树形结构建模;第三步:通过剪枝的方法,保留基本的数据结构信息,剪除相同的重复数据结构,缩小模型的体量,但仍然保留基础的数据结构,降低JSON数据结构所带来的查询开销。本发明有利于加快对数据进行检索定位、增强判断从属关系的准确性、提高数据利用率及易用性。
Description
技术领域
本发明涉及一种面向Web2.0的JSON数据的解析与建模方法。
背景技术
Web 2.0,是相对Web 1.0(2003年以前的互联网模式)的新的一类互联网应用的统称,是一次从核心内容到外部应用的革命。由Web1.0单纯通过网络浏览器浏览html网页模式向内容更丰富、联系性更强、工具性更强的Web2.0互联网模式的发展已经成为互联网新的发展趋势。Web 2.0是信息技术发展引发网络革命所带来的面向未来、以人为本的创新2.0模式在互联网领域的典型体现,是由专业人员织网到所有用户参与织网的创新民主化进程的生动注释。
REST(Representational State Transfer)架构风格于2000年发布于国际会议ICSE上,它是一种Web体系结构的抽象模型,用于指导重新设计和定义超文本传输协议和统一资源标识符。至今仍然能够根据这种架构风格的应用来了解万维网的工作方式与原理,这对于大规模软件架构的理解与发展有重要意义。Roy T.Fielding博士提出REST架构风格的论文在谷歌学术上统计已经被引用超过7000次,发布于ICSE/TOIT的论文被引用超过2000次。
REST服务的流行使得网络上出现了大量的轻量级数据服务,并持续保持爆炸性指数增长,国际上网站上也出现了大量服务供应商,致力于网络服务的集中供应与质量保障。大型在线web服务网站ProgrammableWeb聚集了各个领域大量的API信息,目前其收集的API数量已超过两万,其中REST架构风格的服务占80%以上;各大网络科技公司也有自己的API公开平台,如:Google、YouTube、Facebook、百度、阿里巴巴;还有许多个人开发的API公布在GitHub和个人BLOG上。
ProgrammableWeb所收集的服务中,响应格式种类繁多,其中以JSON与XML格式为主。XML(可扩展标记语言)是最古老的数据格式之一。它由W3C(万维网联盟)定义,并基于较旧的SGML(标准通用标记语言)格式。在XML中,数据使用元素和属性进行结构化。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,是一种理想的数据交换语言。相比之下,XML有大量的冗余元素,重复的元素名称导致数据体量增大。JSON则没有重复元素名称所带来的数据冗余,数据传输速率更高,解析效率与查找效率都高于XML。近年来开发者更倾向于使用JSON作为数据响应格式。在ProgrammableWeb收集的REST服务中,响应格式支持JSON的服务占据了90%以上的比例。
JSON结构的根本是一种映射关系,以键值对的形式存储数据,并且可以进行深层嵌套来表示更为复杂的数据关系。JSON构建于两种结构:“键-值”对的集合和数组。当对象是一个无序的“键-值”对集合时,一个对象以“{”开始,“}”结束,每个“键”后跟一个“:”,“键-值”对之间使用“,”分隔;数组是值(VALUE)的有序集合,一个数组以“[”开始,“]”结束,值之间使用“,”分隔。值(VALUE)可以是双引号括起来的字符串(STRING)、数值(NUMBER)、TRUE、FALSE、NULL、对象(OBJECT)或者数组(ARRAY)。同时,“键-值”对结构和数组结构可以相互嵌套。
JSON数据的可读性相较于XML数据来说已经有了大幅的增强,“键-值”对式的基础关系结构定义简洁,但实际应用中元素间存在大量嵌套关系,使得数据冗长复杂,难以直观判断元素间的从属关系;JSON数据又是以字符串形式返回,长字符串可读性较差,无法快速对元素进行查找定位。通过对JSON数据进行解析与建模,可以将JSON数据以标准化的模型进行表示,利于对数据节点的快速查询、精确定位,便于对数据结构进行分析,更好地对数据进行管理。
北京小度信息科技有限公司于2017年提出的一种JSON数据解析方法及装置,专利号为201710312743.6,根据待查询的JSON节点的信息配置解析模板,依据解析模板构建JAVA数据结构,再利用JSON数据初始化JAVA数据结构得到JAVA对象。但这需要预设不同的解析模板来解析不同格式的JSON数据,若有超出预设的结构则无法解析JSON数据,同时增大了开发体量与成本;仅适用于构建JAVA对象的解析方法缺少通用性,有对开发语言种类的限制。济南浪潮高新科技投资发展有限公司于2017年提出的一种JSON数据的结构化解析方法及装置,专利号为201710138525.5,对至少一条JSON数据的文档对象和数组对象进行结构化解析,形成结构化文档数据和结构化数组数据;根据外部输入的关键字段,将所述结构化文档数据与所述结构化数组数据关联合并,形成结构化输出数据;创建所述结构化输出数据中字段与外部关系型数据库中字段之间的字段映射关系;根据所述字段映射关系,将所述结构化输出数据导入所述外部关系型数据库。但这仅对JSON数据进行数据格式的结构化,便于与外部关系型数据库进行对接与导入,输出的结构化数据本身依旧无法进行数据结构分析,对数据的查询依赖于所导入的外部关系型数据库。武汉斗鱼网络科技有限公司于2016年提出的专利号为201611121521.8的一种解析JSON数据的方法及装置,获取JSON数据以及所述JSON数据对应的数据类型信息后,基于所述数据类型信息,确定指定数据类型;将所述JSON数据转换为所述指定数据类型的数据对象;返回所述指定数据类型的数据对象。但这将每个数据分别创建数据对象,没有保存数据间的结构关系,将关联的数据变成了离散的数据对象,无法分析数据结构,更无法对数据进行定位、查询。北京思特奇信息技术股份有限公司于2014年提出一种任意层次JSON对象的解析与生成方法及系统,专利号为201410601883.1,通过定义一个对象数组,将所述对象数组中的每个对象作为对JSON一个节点的描述;对JSON内的层次进行定义,得到一个句柄;选择对象数组和一个句柄为基础,采用lexPath方法解析,得到一个有序数组;判断有序数组是否与需操作的节点存在对应关系;获取需要操作的节点的类型,根据节点的类型调用JSON中对应的API应用程序编程接口完成解析功能或者生成功能。但对象数组的结构本身是一种单一的有序数列的数据结构,对于灵活多变的JSON数据结构来说增加了数据结构形式的限制,若对指定数据进行查询则需要对数组进行遍历,产生较大的时间开销,并且对于不同类型的节点,还需要调用不同的API,增加了解析开销。
发明内容
为了克服现有的JSON数据解析方法中数据定位、查询开销大、数据结构分析困难的问题,本发明提出了一种面向Web 2.0的JSON数据解析与建模方法,有利于加快对数据进行检索定位、增强判断从属关系的准确性、提高数据利用率及易用性。
本发明所采用的技术方案是:
一种面向Web 2.0的JSON数据解析与建模方法,所述方法包括以下步骤:
第一步:定义元数据树MDT,包括根节点TRoot、索引节点INode、数据节点DNode,同时用深度level来表示节点在树结构中的层数,根节点默认为第一层,即level=1;
1.1、根节点:MDT的根节点,即MDT的起始节点;
1.2、索引节点:代表JSON数据中每一个关键字KEY,但不包括JSON数据中最内层的“键-值”对的关键字,索引节点为非根节点、非叶子节点;
1.3、数据节点:代表JSON数据中最内层的“键-值”对,存储为叶子节点;
第二步:读取调用的REST API所返回的JSON数据,将JSON数据集ds作为建模算法的输入,对ds进行树形结构建模,步骤如下:
2.1、创建一棵根节点为TRoot的MDT,TRoot是起始节点,根节点的深度level默认为1;
2.2、读取JSON数据集ds,如果是首次读取ds,设置ds的第一个元素为当前元素,元素包括关键字KEY及其值VALUE;否则设置ds的下一个元素为当前元素;若JSON数据最外层就是ARRAY,则TRoot的isMark=1,元素数量arrayNum为ARRAY元素个数;
第三步:通过剪枝的方法,保留基本的数据结构信息,剪除相同的重复数据结构,缩小模型的体量,但仍然保留基础的数据结构,降低JSON数据结构所带来的查询开销。
进一步,所述第三步的处理过程包括以下步骤;
3.1、从level=1的TRoot开始,按广度优先策略,按层遍历MDT的根节点与索引节点;广度优先策略将按level逐层遍历MDT,从level=1的第一层开始遍历,当level层的节点遍历完成后,再继续遍历level+1层的节点;
3.2、将MDT的TRoot存入遍历队列;
3.3、按遍历队列顺序,读取每个节点的isMark属性;
3.4、当遍历队列中全部为数据节点时或遍历队列为空时,停止遍历,结束方法;
3.5、输出剪枝后的MDT。
再进一步,所述步骤3.3的处理过程为:
3.3.1、若遍历到的节点的isMark属性值为1,则保留当前节点的第一个子节点,剪除其余的子节点及其子节点的子树结构,跳转至步骤3.3.4;
3.3.2、若遍历到的节点的isMark属性值为0,则不进行任何操作,跳转至步骤3.3.4;
3.3.3、若遍历到的节点为数据节点,将当前节点从遍历队列中删除,跳转至步骤3.3;
3.3.4、将当前遍历到的节点的子节点加入遍历队列,并将当前节点从遍历队列中删除,再跳转至步骤3.3。
所述1.1中,所述根节点内包含以下信息:
1.1.1、星标isMark:记录JSON数据中最外层结构是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述如(1)(2),isMark的数据类型为数字NUMBER,若JSON数据中“键-值”对中的值VALUE为数组ARRAY,则isMark=1,否则isMark=0;“#”为数据类型定义符,“::=”为赋值符,〖A→condition⊕<B>:<C>〗表示若A符合条件condition,则该式值为B,否则该式值为C;
(1)、“isMark”#<NUMBER>
(2)、“isMark”::=〖“VALUE”→ARRAY⊕<1>:<0>〗
1.1.2、元素数量arrayNum:若当前节点的isMark为1,则记录数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述如(3)(4),arrayNum属性值为数字NUMBER类型,若JSON数据中“键-值”对中的值VALUE为ARRAY,则arrayNum等于VALUE数组的长度,否则arrayNum=0;
(3)、“arrayNum”#<NUMBER>
(4)、“arrayNum”::=〖“VALUE”→ARRAY⊕<ARRAY.length>:<0>〗。
所述1.2中,所述索引节点内包含以下信息:
1.2.1、节点名称name:name的数据类型为字符串STRING,name属性值为JSON数据中“键-值”对中的关键字KEY;name形式化定义表述如(5)(6);
(5)、“name”#<STRING>
(6)、“name”::=<KEY>
1.2.2、节点值类型vType:vType是JSON数据中“键-值”对中的值VALUE的数据类型,属性值为对象OBJECT、数组ARRAY、字符串STRING、数字NUMBER、TRUE、FALSE之一;vType形式化定义表述如(7);
(7)、“vType”::=[OBJECT|ARRAY|STRING|NUMBER|TRUE|FALSE]
1.2.3、星标(isMark):记录JSON数据中,以当前节点名称name作为关键字的“键-值”对中的值VALUE是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述同步骤1.1.1中的(1)(2);
1.2.4、元素数量arrayNum:若当前节点的isMark为1,则记录“键-值”对中的值VALUE的数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述同步骤1.1.2中的(3)(4)。
所述1.3中,所述数据节点内包含以下信息:
1.3.1、节点名称name:保存JSON数据中“键-值”对中的关键字KEY,数据类型为字符串STRING;name形式化定义表述同步骤1.2.1中的(5)(6);
1.3.2、节点值nValue:nValue的数据类型为STRING,属性值为JSON数据中“键-值”对中的值VALUE;nValue形式化定义表述如(8)(9);
(8)、“nValue”#<STRING>
(9)、“nValue”::=<VALUE>
1.3.3、节点类型type:保存JSON数据中“键-值”对中的值VALUE的数据类型,为“str”、“num”或NULL,其中“str”代表type的数据类型为STRING,“num”代表type的数据类型为NUMBER,NULL表示type的属性值为空;type形式化定义表述如(10);
(10)、“type”::=[“str”|“num”|NULL]。
所述步骤2.2的处理过程如下:
2.2.1、若VALUE的数据类型非OBJECT,同时非ARRAY,创建深度为level+1的数据节点,节点名称name为关键字KEY,节点值nValue为值VALUE,节点类型type为值VALUE的数据类型;完成后跳转至步骤2.2;
2.2.2、若VALUE的数据类型为ARRAY,创建深度level’=level+1的索引节点,节点名称name为关键字KEY,节点值类型vType为ARRAY,isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;
2.2.3、若VALUE的数据类型为OBJECT,创建深度level’=level+1的索引节点,节点名称name为每个OBJECT元素中的关键字KEY,节点值类型vType为每个OBJECT元素中的值VALUE的数据类型;若当前vType为ARRAY,则isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;
2.2.4、将步骤2.2.3中VALUE数组作为新的JSON数据集ds’,跳转至步骤2.2。
所述2.2.2的处理过程为:
2.2.2.1、若所述2.2.2中的VALUE数组的元素不是OBJECT类型,则创建level”=level’+1的数据节点,节点名称name为关键字KEY,节点值nValue为值VALUE,节点类型type为值VALUE的数据类型;完成后跳转至步骤2.2;
2.2.2.2、若所述2.2.2中的VALUE数组的元素是OBJECT类型,则创建level”=level’+1的索引节点,节点名称name为每个OBJECT元素中的关键字KEY,节点值类型vType为每个OBJECT元素中的值VALUE的数据类型,若当前vType为ARRAY,则isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;
2.2.2.3、将步骤2.2.2.2中VALUE数组作为新的JSON数据集ds’,跳转至步骤2.2。
本发明的有益效果表现在:采用树形数据结构来对解析后的JSON数据进行建模,为每一个REST API所返回的JSON数据创建一棵元数据树(Metadate_Tree,简写为MDT),MDT中除了根节点外的每一个树节点都对应一个JSON数据中的数据节点,每个树节点中都保存了对应JSON数据节点的数据信息、类型信息及结构信息,标准化、规范化的树形数据结构有利于加快对数据进行检索定位,增强判断从属关系的准确性,提高数据利用率及易用性,从而提高互联网上对使用JSON响应格式的REST API的利用率。
附图说明
图1示出了2018世界杯REST API所返回的JSON数据结构图。
图2示出了JSON数据转化的树形结构图。
图3示出了JSON数据剪枝后的树形结构图。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1~图3,一种面向Web 2.0的JSON数据解析与建模方法,包括以下步骤:
第一步:定义元数据树(MDT),包括根节点(Tree_Root,简写为TRoot)、索引节点(Index_Node,简写为INode)、数据节点(Data_Node,简写为DNode),同时用深度(level)来表示节点在树结构中的层数,根节点默认为第一层,即level=1;
1.1、根节点:MDT的根节点,即MDT的起始节点;
1.2、索引节点:代表JSON数据中每一个关键字(KEY),但不包括JSON数据中最内层的“键-值”对的关键字,索引节点为非根节点、非叶子节点;
1.3、数据节点:代表JSON数据中最内层的“键-值”对,存储为叶子节点;
所述1.1中,所述根节点内包含以下信息:
1.1.1、星标(isMark):记录JSON数据中最外层结构是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述如(1)(2),isMark的数据类型为数字(NUMBER),若JSON数据中“键-值”对中的值(VALUE)为数组(ARRAY),则isMark=1,否则isMark=0;“#”为数据类型定义符,“::=”为赋值符,〖A→condition⊕<B>:<C>〗表示若A符合条件condition,则该式值为B,否则该式值为C;
(1)、“isMark”#<NUMBER>
(2)、“isMark”::=〖“VALUE”→ARRAY⊕<1>:<0>〗
1.1.2、元素数量(arrayNum):若当前节点的isMark为1,则记录数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述如(3)(4),arrayNum属性值为数字(NUMBER)类型,若JSON数据中“键-值”对中的值(VALUE)为ARRAY,则arrayNum等于VALUE数组的长度,否则arrayNum=0;
(3)、“arrayNum”#<NUMBER>
(4)、“arrayNum”::=〖“VALUE”→ARRAY⊕<ARRAY.length>:<0>〗
所述1.2中,所述索引节点内包含以下信息:
1.2.1、节点名称(name):name的数据类型为字符串(STRING),name属性值为JSON数据中“键-值”对中的关键字(KEY);name形式化定义表述如(5)(6);
(5)、“name”#<STRING>
(6)、“name”::=<KEY>
1.2.2、节点值类型(vType):vType是JSON数据中“键-值”对中的值(VALUE)的数据类型,属性值为对象(OBJECT)、数组(ARRAY)、字符串(STRING)、数字(NUMBER)、TRUE、FALSE之一;vType形式化定义表述如(7);
(7)、“vType”::=[OBJECT|ARRAY|STRING|NUMBER|TRUE|FALSE]
1.2.3、星标(isMark):记录JSON数据中,以当前节点名称(name)作为关键字的“键-值”对中的值(VALUE)是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述同步骤1.1.1中的(1)(2);
1.2.4、元素数量(arrayNum):若当前节点的isMark为1,则记录“键-值”对中的值(VALUE)的数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述同步骤1.1.2中的(3)(4)
所述1.3中,所述数据节点内包含以下信息:
1.3.1、节点名称(name):保存JSON数据中“键-值”对中的关键字(KEY),数据类型为字符串(STRING);name形式化定义表述同步骤1.2.1中的(5)(6);
1.3.2、节点值(nValue):nValue的数据类型为STRING,属性值为JSON数据中“键-值”对中的值(VALUE);nValue形式化定义表述如(8)(9);
(8)、“nValue”#<STRING>
(9)、“nValue”::=<VALUE>
1.3.3、节点类型(type):保存JSON数据中“键-值”对中的值(VALUE)的数据类型,为“str”、“num”或NULL,其中“str”代表type的数据类型为STRING,“num”代表type的数据类型为NUMBER,NULL表示type的属性值为空;type形式化定义表述如(10);
(10)、“type”::=[“str”|“num”|NULL]
第二步:读取调用的REST API所返回的JSON数据,将JSON数据集ds作为建模算法的输入,对ds进行树形结构建模,步骤如下:
2.1、创建一棵根节点为TRoot的MDT,TRoot是起始节点,根节点的深度(level)默认为1;
2.2、读取JSON数据集ds,如果是首次读取ds,设置ds的第一个元素为当前元素,元素包括关键字(KEY)及其值(VALUE);否则设置ds的下一个元素为当前元素;若JSON数据最外层就是ARRAY,则TRoot的isMark=1,元素数量(arrayNum)为ARRAY元素个数;
2.2.1、若VALUE的数据类型非OBJECT,同时非ARRAY,创建深度为level+1的数据节点,节点名称(name)为关键字(KEY),节点值(nValue)为值(VALUE),节点类型(type)为值(VALUE)的数据类型;完成后跳转至步骤2.2;
2.2.2、若VALUE的数据类型为ARRAY,创建深度level’=level+1的索引节点,节点名称(name)为关键字(KEY),节点值类型(vType)为ARRAY,isMark=1,元素数量(arrayNum)为当前VALUE数组中的元素个数;
2.2.2.1、若所述2.2.2中的VALUE数组的元素不是OBJECT类型,则创建level”=level’+1的数据节点,节点名称(name)为关键字(KEY),节点值(nValue)为值(VALUE),节点类型(type)为值(VALUE)的数据类型;完成后跳转至步骤2.2;
2.2.2.2、若所述2.2.2中的VALUE数组的元素是OBJECT类型,则创建level”=level’+1的索引节点,节点名称(name)为每个OBJECT元素中的关键字(KEY),节点值类型(vType)为每个OBJECT元素中的值(VALUE)的数据类型。若当前vType为ARRAY,则isMark=1,元素数量(arrayNum)为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;
2.2.2.3、将步骤2.2.2.2中VALUE数组作为新的JSON数据集ds’,跳转至步骤2.2;
2.2.3、若VALUE的数据类型为OBJECT,创建深度level’=level+1的索引节点,节点名称(name)为每个OBJECT元素中的关键字(KEY),节点值类型(vType)为每个OBJECT元素中的值(VALUE)的数据类型。若当前vType为ARRAY,则isMark=1,元素数量(arrayNum)为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;
2.2.4、将步骤2.2.3中VALUE数组作为新的JSON数据集ds’,跳转至步骤2.2。
第三步:由于JSON数据集中可能存在批量数据,批量数据通常以相同的数据结构形式存在,在数据集中常用数组的形式表现。若是用户的对于JSON数据分析的重点不在于数据的定位、查询,而是针对数据结构的分析,在上述JSON数据解析建模的方法基础上,可以通过剪枝的方法,保留基本的数据结构信息,剪除相同的重复数据结构,缩小模型的体量,但仍然保留基础的数据结构,降低JSON数据结构所带来的查询开销,方法步骤如下:
3.1、从level=1的TRoot开始,按广度优先策略,按层遍历MDT的根节点与索引节点;广度优先策略将按level逐层遍历MDT,从level=1的第一层开始遍历,当level层的节点遍历完成后,再继续遍历level+1层的节点;
3.2、将MDT的TRoot存入遍历队列;
3.3、按遍历队列顺序,读取每个节点的isMark属性;
3.3.1、若遍历到的节点的isMark属性值为1,则保留当前节点的第一个子节点,剪除其余的子节点及其子节点的子树结构,跳转至步骤3.3.4;
3.3.2、若遍历到的节点的isMark属性值为0,则不进行任何操作,跳转至步骤3.3.4;
3.3.3、若遍历到的节点为数据节点,将当前节点从遍历队列中删除,跳转至步骤3.3;
3.3.4、将当前遍历到的节点的子节点加入遍历队列,并将当前节点从遍历队列中删除,再跳转至步骤3.3;
3.4、当遍历队列中全部为数据节点时或遍历队列为空时,停止遍历,结束方法;
3.5、输出剪枝后的MDT。
实例:图1示出了2018世界杯REST API所返回的JSON数据结构图。World Cup inJSON API的供应商为Software For Good,这是一个体育类的API,它的发布主页为http://worldcup.sfg.io,文档主页URL为https://github.com/estiens/world_cup_json。在所示JSON数据结构中展示了2018世界杯第一场比赛信息,fifa_id标注了比赛的ID,weather包含了比赛当天的比赛地区的天气信息,attendance表示该场比赛的观众人数,officials包含了该场比赛的工作人员名单,home_team和away_team介绍了该场比赛两支对阵队伍的信息,home_team_events和away_team_events包含了比赛中对阵双方的判、罚事件,home_team_statistics和away_team_statistics包含了在该场比赛中对阵队伍的比赛数据统计信息。
图2是基于我们的方法步骤二得到的JSON数据转化的树形结构图。图中tree_root为MDT的根节点(TRoot),index_node为索引节点(INode),data_node为数据节点(DNode)。在level为1的根节点TRoot下,level=2的每一个INode都包含了一场比赛的信息,下层的每一个节点代表一个属性和它的值。其中,level=3的home_team_statistics属性,包含了on_target、off_target、blocked、offsides属性,则在home_team_statistics节点下创建level=4的on_target、off_target、blocked、offsides节点作为DNode。在图2的MDT中,TRoot的属性isMark=1,因为2018世界杯的64场比赛信息以数组形式返回;除根节点外,有子节点的节点为索引节点,即JSON数据中,VALUE为ARRAY类型或OBJECT类型的节点均为索引节点;MDT中的叶子节点为数据节点,即JSON数据中,VALUE不为ARRAY类型,也不为OBJECT类型的节点均为数据节点。图2展示的就是2018世界杯JSON数据的树形模型。
图3示出了JSON数据剪枝后的树形结构图。“比赛1”至“比赛64”的信息以数组形式返回,即TRoot的isMark属性值为1。每一场比赛数据中都包含了相同的属性,即每场比赛数据的子结构是一致的,只需保留一场比赛的信息结构,就能知道所有比赛的信息结构,所以保留“比赛1”分支,剪除其余分支信息。在“比赛1”分支下的home_team_event属性中,每一事件都作为一个数组元素,每个事件都包含了id、type_of_event、player、time四个属性,只需保留一个数组元素,就能知道所有事件的信息结构,所以保留第一个事件的分支,剪除其余分支信息。依次对于所有isMark=1的节点都进行如步骤三的剪枝,就能获得化简后的MDT。
Claims (8)
1.一种面向Web 2.0的JSON数据解析与建模方法,其特征在于,所述方法包括以下步骤:
第一步:定义元数据树MDT,包括根节点TRoot、索引节点INode、数据节点DNode,同时用深度level来表示节点在树结构中的层数,根节点默认为第一层,即level=1;
1.1、根节点:MDT的根节点,即MDT的起始节点;
1.2、索引节点:代表JSON数据中每一个关键字KEY,但不包括JSON数据中最内层的“键-值”对的关键字,索引节点为非根节点、非叶子节点;
1.3、数据节点:代表JSON数据中最内层的“键-值”对,存储为叶子节点;
第二步:读取调用的REST API所返回的JSON数据,将JSON数据集ds作为建模算法的输入,对ds进行树形结构建模,步骤如下:
2.1、创建一棵根节点为TRoot的MDT,TRoot是起始节点,根节点的深度level默认为1;
2.2、读取JSON数据集ds,如果是首次读取ds,设置ds的第一个元素为当前元素,元素包括关键字KEY及其值VALUE;否则设置ds的下一个元素为当前元素;若JSON数据最外层就是ARRAY,则TRoot的isMark=1,元素数量arrayNum为ARRAY元素个数;
第三步:通过剪枝的方法,保留数据结构信息,剪除相同的重复数据结构,缩小模型的体量,但仍然保留数据结构,降低JSON数据结构所带来的查询开销。
2.如权利要求1所述的一种面向Web 2.0的JSON数据解析与建模方法,其特征在于,所述第三步的处理过程包括以下步骤;
3.1、从level=1的TRoot开始,按广度优先策略,按层遍历MDT的根节点与索引节点;广度优先策略将按level逐层遍历MDT,从level=1的第一层开始遍历,当level层的节点遍历完成后,再继续遍历level+1层的节点;
3.2、将MDT的TRoot存入遍历队列;
3.3、按遍历队列顺序,读取每个节点的isMark属性;
3.4、当遍历队列中全部为数据节点时或遍历队列为空时,停止遍历,结束方法;
3.5、输出剪枝后的MDT。
3.如权利要求2所述的一种面向Web 2.0的JSON数据解析与建模方法,其特征在于,所述步骤3.3的处理过程为:
3.3.1、若遍历到的节点的isMark属性值为1,则保留当前节点的第一个子节点,剪除其余的子节点及其子节点的子树结构,跳转至步骤3.3.4;
3.3.2、若遍历到的节点的isMark属性值为0,则不进行任何操作,跳转至步骤3.3.4;
3.3.3、若遍历到的节点为数据节点,将当前节点从遍历队列中删除,跳转至步骤3.3;
3.3.4、将当前遍历到的节点的子节点加入遍历队列,并将当前节点从遍历队列中删除,再跳转至步骤3.3。
4.如权利要求1~3之一所述的一种面向Web 2.0的JSON数据解析与建模方法,其特征在于,所述1.1中,所述根节点内包含以下信息:
1.1.1、星标isMark:记录JSON数据中最外层结构是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述如(1)(2),isMark的数据类型为数字NUMBER,若JSON数据中“键-值”对中的值VALUE为数组ARRAY,则isMark=1,否则isMark=0;“#”为数据类型定义符,“::=”为赋值符,表示若A符合条件condition,则该式值为B,否则该式值为C;
(1)、“isMark”#<NUMBER>
1.1.2、元素数量arrayNum:若当前节点的isMark为1,则记录数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述如(3)(4),arrayNum属性值为数字NUMBER类型,若JSON数据中“键-值”对中的值VALUE为ARRAY,则arrayNum等于VALUE数组的长度,否则arrayNum=0;
(3)、“arrayNum”#<NUMBER>
5.如权利要求1~3之一所述的一种面向Web 2.0的JSON数据解析与建模方法,其特征在于,所述1.2中,所述索引节点内包含以下信息:
1.2.1、节点名称name:name的数据类型为字符串STRING,name属性值为JSON数据中“键-值”对中的关键字KEY;name形式化定义表述如(5)(6);
(5)、“name”#<STRING>
(6)、“name”::=<KEY>
1.2.2、节点值类型vType:vType是JSON数据中“键-值”对中的值VALUE的数据类型,属性值为对象OBJECT、数组ARRAY、字符串STRING、数字NUMBER、TRUE、FALSE之一;vType形式化定义表述如(7);
(7)、“vType”::=[OBJECT|ARRAY|STRING|NUMBER|TRUE|FALSE]
1.2.3、星标isMark:记录JSON数据中,以当前节点名称name作为关键字的“键-值”对中的值VALUE是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述同步骤1.1.1中的(1)(2);
1.2.4、元素数量arrayNum:若当前节点的isMark为1,则记录“键-值”对中的值VALUE的数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述同步骤1.1.2中的(3)(4)。
6.如权利要求1~3之一所述的一种面向Web 2.0的JSON数据解析与建模方法,其特征在于,所述1.3中,所述数据节点内包含以下信息:
1.3.1、节点名称name:保存JSON数据中“键-值”对中的关键字KEY,数据类型为字符串STRING;name形式化定义表述同步骤1.2.1中的(5)(6);
1.3.2、节点值nValue:nValue的数据类型为STRING,属性值为JSON数据中“键-值”对中的值VALUE;nValue形式化定义表述如(8)(9);
(8)、“nValue”#<STRING>
(9)、“nValue”::=<VALUE>
1.3.3、节点类型type:保存JSON数据中“键-值”对中的值VALUE的数据类型,为“str”、“num”或NULL,其中“str”代表type的数据类型为STRING,“num”代表type的数据类型为NUMBER,NULL表示type的属性值为空;type形式化定义表述如(10);
(10)、“type”::=[“str”|“num”|NULL]。
7.如权利要求1~3之一所述的一种面向Web 2.0的JSON数据解析与建模方法,其特征在于,所述步骤2.2的处理过程如下:
2.2.1、若VALUE的数据类型非OBJECT,同时非ARRAY,创建深度为level+1的数据节点,节点名称name为关键字KEY,节点值nValue为值VALUE,节点类型type为值VALUE的数据类型;完成后跳转至步骤2.2;
2.2.2、若VALUE的数据类型为ARRAY,创建深度level’=level+1的索引节点,节点名称name为关键字KEY,节点值类型vType为ARRAY,isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;
2.2.3、若VALUE的数据类型为OBJECT,创建深度level’=level+1的索引节点,节点名称name为每个OBJECT元素中的关键字KEY,节点值类型vType为每个OBJECT元素中的值VALUE的数据类型;若当前vType为ARRAY,则isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;
2.2.4、将步骤2.2.3中VALUE数组作为新的JSON数据集ds’,跳转至步骤2.2。
8.如权利要求7所述的一种面向Web 2.0的JSON数据解析与建模方法,其特征在于,所述2.2.2的处理过程为:
2.2.2.1、若所述2.2.2中的VALUE数组的元素不是OBJECT类型,则创建level”=level’+1的数据节点,节点名称name为关键字KEY,节点值nValue为值VALUE,节点类型type为值VALUE的数据类型;完成后跳转至步骤2.2;
2.2.2.2、若所述2.2.2中的VALUE数组的元素是OBJECT类型,则创建level”=level’+1的索引节点,节点名称name为每个OBJECT元素中的关键字KEY,节点值类型vType为每个OBJECT元素中的值VALUE的数据类型,若当前vType为ARRAY,则isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;
2.2.2.3、将步骤2.2.2.2中VALUE数组作为新的JSON数据集ds’,跳转至步骤2.2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910201420.9A CN110059085B (zh) | 2019-03-18 | 2019-03-18 | 一种面向Web 2.0的JSON数据解析与建模方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910201420.9A CN110059085B (zh) | 2019-03-18 | 2019-03-18 | 一种面向Web 2.0的JSON数据解析与建模方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110059085A CN110059085A (zh) | 2019-07-26 |
CN110059085B true CN110059085B (zh) | 2021-02-26 |
Family
ID=67316164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910201420.9A Active CN110059085B (zh) | 2019-03-18 | 2019-03-18 | 一种面向Web 2.0的JSON数据解析与建模方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110059085B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112131839A (zh) * | 2020-08-26 | 2020-12-25 | 徐智 | Json数据结构的显示方法及装置 |
CN112130860B (zh) * | 2020-09-23 | 2023-09-05 | 北京奇艺世纪科技有限公司 | Json对象解析方法、装置、电子设备及存储介质 |
CN112182310B (zh) * | 2020-11-04 | 2023-11-17 | 上海德拓信息技术股份有限公司 | 一种内置实时搜索的通用树形组件实现方法 |
CN114647649A (zh) * | 2022-05-13 | 2022-06-21 | 中电云数智科技有限公司 | 基于层序遍历的半结构化数据同步方法及装置 |
CN115329759B (zh) * | 2022-10-17 | 2023-03-24 | 北京宝兰德软件股份有限公司 | 信息处理方法、装置、设备及存储介质 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462582B (zh) * | 2014-12-30 | 2017-07-11 | 武汉大学 | 一种基于结构和内容二级过滤的Web数据相似性检测方法 |
US20170316528A1 (en) * | 2016-04-28 | 2017-11-02 | Karen E. Willcox | System and method for generating visual education maps |
CN106941486A (zh) * | 2017-02-17 | 2017-07-11 | 西安电子科技大学 | 一种通用型物联网监测控制系统及控制方法 |
CN107220096A (zh) * | 2017-04-20 | 2017-09-29 | 北京小度信息科技有限公司 | 一种json数据解析方法及装置 |
CN107423391B (zh) * | 2017-07-24 | 2020-11-03 | 福州大学 | 网页结构化数据的信息提取方法 |
CN108182265B (zh) * | 2018-01-09 | 2021-06-29 | 清华大学 | 针对关系网络的多层迭代筛选方法及装置 |
CN108228369B (zh) * | 2018-01-19 | 2020-08-07 | 北京邮电大学 | 基于json树的可视化api组合系统及方法 |
CN108563729B (zh) * | 2018-04-04 | 2022-04-01 | 福州大学 | 一种基于dom树的招标网站中标信息抽取方法 |
CN109144514B (zh) * | 2018-06-11 | 2021-06-18 | 玖富金科控股集团有限责任公司 | Json格式数据解析存储方法及装置 |
CN109284394A (zh) * | 2018-09-12 | 2019-01-29 | 青岛大学 | 一种从多源数据集成视角构建企业知识图谱的方法 |
CN109460410A (zh) * | 2018-11-08 | 2019-03-12 | 四川长虹电器股份有限公司 | 将具有父子关系的json数据转换成树形结构数据的方法 |
-
2019
- 2019-03-18 CN CN201910201420.9A patent/CN110059085B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110059085A (zh) | 2019-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110059085B (zh) | 一种面向Web 2.0的JSON数据解析与建模方法 | |
US7941420B2 (en) | Method for organizing structurally similar web pages from a web site | |
CN110059073B (zh) | 基于子图同构的web数据自动可视化方法 | |
Buttler et al. | A fully automated object extraction system for the World Wide Web | |
Korobchinsky et al. | Peculiarities of content forming and analysis in internet newspaper covering music news | |
CN108563729B (zh) | 一种基于dom树的招标网站中标信息抽取方法 | |
CN105389329B (zh) | 一种基于群体评论的开源软件推荐方法 | |
CN110110075A (zh) | 网页分类方法、装置以及计算机可读存储介质 | |
WO2007064050A1 (en) | System offering a data- skin based on standard schema and the method | |
US10924551B2 (en) | IRC-Infoid data standardization for use in a plurality of mobile applications | |
US11461333B2 (en) | Vertical union of feature-based datasets | |
CN101872350A (zh) | 网页正文抽取方法和装置 | |
CN111708774B (zh) | 一种基于大数据的产业分析系统 | |
CN103559234A (zh) | RESTful Web服务的自动化语义标注系统和方法 | |
Grigalis | Towards web-scale structured web data extraction | |
Hao et al. | Semantic patterns for user‐interactive question answering | |
US11281729B2 (en) | Method for automatically generating a wrapper for extracting web data, and a computer system | |
CN109902434B (zh) | 云计算环境下面向rest架构风格的服务数据可视化建模与匹配方法 | |
CN103294791A (zh) | 一种可扩展标记语言模式匹配方法 | |
CN117407505A (zh) | 一种融合文档知识和问答对数据的问答检索方法及系统 | |
JP5380874B2 (ja) | 情報検索方法、プログラム及び装置 | |
Taktak et al. | A model-driven approach for semantic data-as-a-service generation | |
CN112199613B (zh) | 融合dom拓扑和文本属性的产品url自动定位方法 | |
Guo et al. | Design and implementation of the network video data acquisition system | |
Wen et al. | An automatic web data extraction approach based on path index trees |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |