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”#
(2)、
1.1.2、元素数量arrayNum:若当前节点的isMark为1,则记录数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述如(3)(4),arrayNum属性值为数字NUMBER类型,若JSON数据中“键-值”对中的值VALUE为ARRAY,则arrayNum等于VALUE数组的长度,否则arrayNum=0;
(3)、“arrayNum”#
(4)、
5.如权利要求1~3之一所述的一种面向Web 2.0的JSON数据解析与建模方法,其特征在于,所述1.2中,所述索引节点内包含以下信息:
1.2.1、节点名称name:name的数据类型为字符串STRING,name属性值为JSON数据中“键-值”对中的关键字KEY;name形式化定义表述如(5)(6);
(5)、“name”#
(6)、“name”::=
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”#
(9)、“nValue”::=
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。