CN109558128A - json数据解析方法、装置及计算机可读存储介质 - Google Patents
json数据解析方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN109558128A CN109558128A CN201811250499.6A CN201811250499A CN109558128A CN 109558128 A CN109558128 A CN 109558128A CN 201811250499 A CN201811250499 A CN 201811250499A CN 109558128 A CN109558128 A CN 109558128A
- Authority
- CN
- China
- Prior art keywords
- data
- json
- parsing
- node
- traversal
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000007405 data analysis Methods 0.000 title claims abstract description 31
- 241000239290 Araneae Species 0.000 claims description 4
- 238000012360 testing method Methods 0.000 abstract description 6
- 230000008569 process Effects 0.000 description 12
- 238000011161 development Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 238000007373 indentation Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000008878 coupling Effects 0.000 description 5
- 238000010168 coupling process Methods 0.000 description 5
- 238000005859 coupling reaction Methods 0.000 description 5
- 238000011835 investigation Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 241000208340 Araliaceae Species 0.000 description 4
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 4
- 235000003140 Panax quinquefolius Nutrition 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 235000008434 ginseng Nutrition 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及数据分析技术领域,公开了一种json数据解析方法,该方法包括:深度优先遍历json末端叶子节点数据,得到json解析数据;将遍历得到的解析数据存储至数据库表;查询所述数据库表,获取所述解析数据。本发明还提供一种装置以及一种计算机可读存储介质。本发明实现了创建数据库表保存json解析数据,提高了代码复用性以及测试效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种json解析方法、装置及计算机可读存储介质。
背景技术
在App(Application,应用)开发过程中,一般会使用到网络通信模块,网络通信模块经常用于通过HTTP(Hyper Text Transport Protocol,超文本传输协议)来传递json数据。当接收到json数据的时候,一般需要开发人员根据具体的数据接口对接收到的json数据进行解析,然后将解析好的json数据重新封装成数据对象来进行进一步处理。
目前开源的json数据解析工具有Fastjson、JackSon、Gson等第三方Java类库。他们都支持json数据的序列化与反序列化。Fastjson是一种java语言实现的json解析工具;JackSon是一种java平台的数据处理框架;Gson是一种用来在Java对象和json数据之间进行映射的java类库。
目前系统中针对json的解析,大多采用硬编码或者是递归的方式解析,通常会存在以下问题:1、硬编码的存在,使json结构和代码高度耦合,json数据格式变化时,代码无法很好的扩展。2、json结构复杂时,会导致代码冗长难以阅读,造成后期维护困难。3、递归方式受限于json深度,如果使用递归方式,递归函数调用的太深,需要太多的内存,递归里用到的局部变量存储在堆栈中,堆栈的访问效率高,速度快,但空间有限,递归太多变量需要一直入栈而不出栈,导致需要的内存空间大于堆栈的空间,栈空间是一般2M堆空间内存空间,递归深度越大越容易导致栈溢出异常。
发明内容
本发明提供一种json数据解析方法、电子装置及计算机可读存储介质,其主要目的在于提供一种通用性好,复用性高的json数据解析方法。
为实现上述目的,本发明还提供一种json数据解析方法,该方法包括:
深度优先遍历json末端叶子节点数据,得到json解析数据;
将所述解析数据存储至数据库表,所述解析数据包括遍历路径;
根据所述遍历路径查询所述数据库表,获取所述解析数据。
可选的,步骤深度优先遍历json末端叶子节点数据,得到json解析数据,还包括:
抽取json节点数据,构建多叉树结构;
深度优先遍历所述多叉树结构。
可选的,步骤将遍历得到的解析数据存储至数据库表之前还包括步骤:配置所述数据库表字段的数据格式。
可选的,通过数据库配置表配置数据格式,所述数据库配置表包括字段:数据节点、节点名称、父数据节点、数据类型、数据长度、数据状态、日期格式、节点顺序、表列名、表名。
本发明还提供了一种电子装置,所述电子装置包括存储器和处理器,所述存储器存储有可在所述处理器上运行的json数据解析程序,所述处理器在执行json数据解析程序时执行以下步骤:
深度优先遍历json末端叶子节点数据,得到json解析数据;
将所述解析数据存储至数据库表,所述解析数据包括遍历路径;
根据所述遍历路径查询所述数据库表,获取所述解析数据。
可选的,步骤深度优先遍历json末端叶子节点数据,得到json解析数据,还包括:
抽取json节点数据,构建多叉树结构;
深度优先遍历所述多叉树结构。
可选的,步骤将遍历得到的解析数据存储至数据库表之前还包括步骤:配置所述数据库表字段的数据格式。
可选的,通过数据库配置表配置数据格式,所述数据库配置表包括字段:数据节点、节点名称、父数据节点、数据类型、数据长度、数据状态、日期格式、节点顺序、表列名、表名。
本发明还提供了一种电子装置,包括:
遍历模块,用于深度优先遍历json末端叶子节点数据,得到json解析数据;
解析数据存储模块,用于所述解析数据存储至数据库表,所述解析数据包括遍历路径;
解析数据查询模块,用于根据所述遍历路径查询所述数据库表,获取所述解析数据。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有json数据解析程序,所述json数据解析程序可被一个或者多个处理器执行,以实现如上述所述的json数据解析方法的步骤。
本发明提出的json数据解析方法、电子装置及计算机可读存储介质,避免了代码和json结构的耦合,从容应对json结构变化;避免递归可能导致的内存占用及栈溢出异常;降低了json解析难度,即使是不熟悉json也很容易上手;较大的提升了开发效率,该工具开发完成后,相对于现有解析json的方法,无需写解析代码,无需写sql,只需创建数据库表,较好的改进了代码的复用性,该工具提取为工具类后,复用性大大提高;提升了测试效率,测试人员可以查询数据库表,对json结构及数据对应的表一目了然,可以较快的熟悉json结构及排查问题。
附图说明
图1为本发明一实施例提供的json数据解析方法的流程示意图;
图2为本发明一实施例提供的多叉树结构示意图;
图3为本发明一实施例提供的数据格式配置表;
图4为本发明一实施例提供的样例数据库表。
图5为本发明一实施例提供的json数据解析电子装置的内部结构示意图;
图6为本发明一实施例提供的json数据解析装置中json数据解析程序的模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种json数据解析方法。参照图1所示,为本发明一实施例提供的json数据解析方法的流程示意图。该方法可以由一个装置执行,该装置可以由软件和/或硬件实现。
在本实施例中,json数据解析方法包括:
步骤S10,深度优先遍历json末端叶子节点数据,得到json解析数据;
深度优先遍历,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。例如对于多叉树,参考图2,深度优先遍历的结果就是:A,B,D,E,I,C,F,G,H.(假设先走子节点的的左侧)。
深度优先遍历各个节点,需要使用到栈(Stack)这种数据结构。stack的特点是是先进后出。整个遍历过程如下:
先往栈中压入右节点,再压左节点,这样出栈就是先左节点后右节点了。
首先将A节点压入栈中,stack(A);
将A节点弹出,同时将A的子节点C,B压入栈中,此时B在栈的顶部,stack(B,C);
将B节点弹出,同时将B的子节点E,D压入栈中,此时D在栈的顶部,stack(D,E,C);
将D节点弹出,没有子节点压入,此时E在栈的顶部,stack(E,C);
将E节点弹出,同时将E的子节点I压入,stack(I,C);
...依次往下,最终遍历完成。
深度优先遍历json末端叶子节点数据的步骤还包括:
抽取json节点数据,构建多叉树结构;
深度优先遍历所述多叉树结构。
采用以下例子说明优先遍历算法遍历json数据:
json数据结构包括对象和数组,对象为“{}”括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
数组为中括号[]括起来的内容,数据结构为["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
抽取上述json数据的节点,构建多叉树结构,再通过深度优先遍历算法遍历多叉树结构,得到解析数据,遍历得到tom学习的课程数据为:class/classname=数学,name=tom。json数据结构的key(键值)为“class/classname”及“name”,key值所对应的value值为“数学”和“tom”,采用深度优先遍历可以获取到遍历路径,在这里遍历路径就是key值。
步骤S20,将遍历得到的解析数据存储至数据库表,所述解析数据包括遍历路径。
进一步的,步骤S20之前还包括步骤S210配置数据库表字段的数据格式。
具体的,通过数据库配置表配置数据格式,参考图3,数据库配置表可以包括以下字段:数据节点、节点名称、父数据节点、数据类型、数据长度、数据状态、日期格式、节点顺序、表列名、表名。
遍历得到的解析数据例如数据节点、节点名称、父数据节点、节点顺序、表列名、表名等数据字段的具体数值存储至数据库表中。附图4提供了一种存储的样例数据库表供参考,附图3为附图4的数据格式配置表,其中,NODECODEPATH字段表示遍历路径即key值,NODECODE表示value值。
步骤S30,根据所述遍历路径查询所述数据库表,获取所述解析数据。
具体的,根据所述遍历路径查询上述存储的数据库表,得到key值,value值,父数据节点等解析数据。这种解析数据可以被java,c,python,c#等语言直接调用。
通过保存及查询数据库表获取json解析数据,可以提高代码复用性,降低了每次调用json数据的复杂性。
本实施例提供的json解析方法,避免了代码和json结构的耦合,从容应对json结构变化;避免递归可能导致的内存占用及栈溢出异常;降低了json解析难度,即使是不熟悉json也很容易上手;较大的提升了开发效率,该工具开发完成后,其他解析json的功能,无需写解析代码,无需写sql,只需创建数据库表。较好的改进了代码的复用性,该工具提取为工具类后,复用性大大提高;提升了测试效率,测试人员可以查询配置表,对json结构及落地数据对应的表一目了然,可以较快的熟悉json结构及排查问题。
本发明还提供一种具有json数据解析功能的电子装置。参照图5所示,为本发明一实施例提供的电子装置的内部结构示意图。
在本实施例中,json数据解析装置1可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、便携计算机等终端设备。该json数据解析装置1至少包括存储器11、处理器12,通信总线13,以及网络接口14。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是json数据解析装置1的内部存储单元,例如该json数据解析装置1的硬盘。存储器11在另一些实施例中也可以是json数据解析装置1的外部存储设备,例如json数据解析装置1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括json数据解析装置1的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于json数据解析装置1的应用软件及各类数据,例如json数据解析程序01的数据库表等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行json数据解析程序01等。
通信总线13用于实现这些组件之间的连接通信。
网络接口14可选的可以包括标准的有线接口、无线接口(如WI-FI接口),通常用于在该装置1与其他电子设备之间建立通信连接。
可选地,该装置1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在json数据解析装置1中处理的信息以及用于显示可视化的用户界面。
图5仅示出了具有组件11-14以及json数据解析程序01的json数据解析装置1,本领域技术人员可以理解的是,图1示出的结构并不构成对json数据解析装置1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
在图5所示的装置1实施例中,存储器11中存储有json数据解析程序01;处理器12执行存储器11中存储的json数据解析程序01时实现如下步骤:
步骤S10,深度优先遍历json末端叶子节点数据,得到json解析数据;
深度优先遍历,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。例如对于多叉树,参考图2,深度优先遍历的结果就是:A,B,D,E,I,C,F,G,H.(假设先走子节点的的左侧)。
深度优先遍历各个节点,需要使用到栈(Stack)这种数据结构。stack的特点是是先进后出。整个遍历过程如下:
先往栈中压入右节点,再压左节点,这样出栈就是先左节点后右节点了。
首先将A节点压入栈中,stack(A);
将A节点弹出,同时将A的子节点C,B压入栈中,此时B在栈的顶部,stack(B,C);
将B节点弹出,同时将B的子节点E,D压入栈中,此时D在栈的顶部,stack(D,E,C);
将D节点弹出,没有子节点压入,此时E在栈的顶部,stack(E,C);
将E节点弹出,同时将E的子节点I压入,stack(I,C);
...依次往下,最终遍历完成。
深度优先遍历json末端叶子节点数据的步骤还包括:
抽取json节点数据,构建多叉树结构;
深度优先遍历所述多叉树结构。
采用以下例子说明优先遍历算法遍历json数据
json数据结构包括对象和数组,对象为“{}”括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
数组为中括号[]括起来的内容,数据结构为["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
抽取上述json数据的节点,构建多叉树结构,再通过深度优先遍历算法遍历多叉树结构,得到解析数据,遍历得到tom学习的课程数据为:class/classname=数学,name=tom。json数据结构的key(键值)为“class/classname”及“name”,key值所对应的value值为“数学”和“tom”,采用深度优先遍历可以获取到遍历路径,在这里遍历路径就是key值。
步骤S20,将所述解析数据存储至数据库表,所述解析数据包括遍历路径。
进一步的,步骤S20之前还包括步骤S210配置数据库表字段的数据格式。
具体的,通过数据库配置表配置数据格式,参考图3,数据库配置表可以包括以下字段:数据节点、节点名称、父数据节点、数据类型、数据长度、数据状态、日期格式、节点顺序、表列名、表名。
遍历得到的解析数据例如数据节点、节点名称、父数据节点、节点顺序、表列名、表名等数据字段的具体数值存储至数据库表中。附图4提供了一种存储的样例数据库表供参考,附图3为附图4的数据格式配置表,其中,NODECODEPATH字段表示遍历路径即key值,NODECODE表示value值。
步骤S30,根据所述遍历路径查询所述数据库表,获取所述解析数据。
具体的,根据所述遍历路径查询上述存储的数据库表,得到key值,value值,父数据节点等解析数据。这种解析数据可以被java,c,python,c#等语言直接调用。
通过保存及查询数据库表获取json解析数据,可以提高代码复用性,降低了每次调用json数据的复杂性。
本实施例提供的json数据解析功能的电子装置,避免了代码和json结构的耦合,从容应对json结构变化;避免递归可能导致的内存占用及栈溢出异常;降低了json解析难度,即使是不熟悉json也很容易上手;较大的提升了开发效率,该工具开发完成后,其他解析json的功能,无需写解析代码,无需写sql,只需创建数据库表。较好的改进了代码的复用性,该工具提取为工具类后,复用性大大提高;提升了测试效率,测试人员可以查询配置表,对json结构及落地数据对应的表一目了然,可以较快的熟悉json结构及排查问题。
本发明实施例还提供了一种json数据解析装置,在该装置中json数据解析程序还可以被分割为一个或者多个模块,一个或者多个模块被存储于存储器11中,并由一个或多个处理器(本实施例为处理器12)所执行以完成本发明,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,用于描述json数据解析程序在json数据解析装置中的执行过程。
例如,参照图3所示,为本发明json数据解析装置一实施例中的json数据解析程序的程序模块示意图,该实施例中,json数据解析程序可以被分割为遍历模块10、解析数据存储模块20、解析数据查询模块30。
示例性地:
遍历模块10,用于深度优先遍历json末端叶子节点数据,得到json解析数据;
深度优先遍历,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。例如对于多叉树,参考图2,深度优先遍历的结果就是:A,B,D,E,I,C,F,G,H.(假设先走子节点的的左侧)。
深度优先遍历各个节点,需要使用到栈(Stack)这种数据结构。stack的特点是是先进后出。整个遍历过程如下:
先往栈中压入右节点,再压左节点,这样出栈就是先左节点后右节点了。
首先将A节点压入栈中,stack(A);
将A节点弹出,同时将A的子节点C,B压入栈中,此时B在栈的顶部,stack(B,C);
将B节点弹出,同时将B的子节点E,D压入栈中,此时D在栈的顶部,stack(D,E,C);
将D节点弹出,没有子节点压入,此时E在栈的顶部,stack(E,C);
将E节点弹出,同时将E的子节点I压入,stack(I,C);
...依次往下,最终遍历完成。
深度优先遍历json末端叶子节点数据的步骤还包括:
抽取json节点数据,构建多叉树结构;
深度优先遍历所述多叉树结构。
采用以下例子说明优先遍历算法遍历json数据:
json数据结构包括对象和数组,对象为“{}”括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
数组为中括号[]括起来的内容,数据结构为["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
抽取上述json数据的节点,构建多叉树结构,再通过深度优先遍历算法遍历多叉树结构,得到解析数据,遍历得到tom学习的课程数据为:class/classname=数学,name=tom。json数据结构的key(键值)为“class/classname”及“name”,key值所对应的value值为“数学”和“tom”,采用深度优先遍历可以获取到遍历路径,在这里遍历路径就是key值。
解析数据存储模块20,用于将所述解析数据存储至数据库表,所述解析数据包括遍历路径;
进一步的,解析数据存储模块20还包括配置数据库表模块。
具体的,配置数据库表模块通过数据库配置表配置数据格式,数据库配置表可以包括以下字段:数据节点、节点名称、父数据节点、数据类型、数据长度、数据状态、日期格式、节点顺序、表列名、表名。
遍历得到的解析数据例如数据节点、节点名称、父数据节点、节点顺序、表列名、表名等数据字段的具体数值存储至数据库表中。附图4提供了一种存储的样例数据库表供参考,附图3为附图4的数据格式配置表,其中,NODECODEPATH字段表示遍历路径即key值,NODECODE表示value值。
解析数据查询模块30,用于根据所述遍历路径查询所述数据库表,获取所述解析数据。
具体的,根据所述遍历路径查询上述存储的数据库表,得到key值,value值,父数据节点等解析数据。这种解析数据可以被java,c,python,c#等语言直接调用。
通过保存及查询数据库表获取json解析数据,可以提高代码复用性,降低了每次调用json数据的复杂性。
本实施例提供的json数据解析装置,避免了代码和json结构的耦合,从容应对json结构变化;避免递归可能导致的内存占用及栈溢出异常;降低了json解析难度,即使是不熟悉json也很容易上手;较大的提升了开发效率,该工具开发完成后,其他解析json的功能,无需写解析代码,无需写sql,只需创建数据库表。较好的改进了代码的复用性,该工具提取为工具类后,复用性大大提高;提升了测试效率,测试人员可以查询配置表,对json结构及落地数据对应的表一目了然,可以较快的熟悉json结构及排查问题。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有json数据解析程序,所述json数据解析程序可被一个或多个处理器执行,以实现如下操作:
步骤S10,深度优先遍历json末端叶子节点数据,得到json解析数据;
深度优先遍历,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。例如对于多叉树,参考图2,深度优先遍历的结果就是:A,B,D,E,I,C,F,G,H.(假设先走子节点的的左侧)。
深度优先遍历各个节点,需要使用到栈(Stack)这种数据结构。stack的特点是是先进后出。整个遍历过程如下:
先往栈中压入右节点,再压左节点,这样出栈就是先左节点后右节点了。
首先将A节点压入栈中,stack(A);
将A节点弹出,同时将A的子节点C,B压入栈中,此时B在栈的顶部,stack(B,C);
将B节点弹出,同时将B的子节点E,D压入栈中,此时D在栈的顶部,stack(D,E,C);
将D节点弹出,没有子节点压入,此时E在栈的顶部,stack(E,C);
将E节点弹出,同时将E的子节点I压入,stack(I,C);
...依次往下,最终遍历完成。
深度优先遍历json末端叶子节点数据的步骤还包括:
抽取json节点数据,构建多叉树结构;
深度优先遍历所述多叉树结构。
采用以下例子说明优先遍历算法遍历json数据:
json数据结构包括对象和数组,对象为“{}”括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
数组为中括号[]括起来的内容,数据结构为["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
抽取上述json数据的节点,构建多叉树结构,再通过深度优先遍历算法遍历多叉树结构,得到解析数据,遍历得到tom学习的课程数据为:class/classname=数学,name=tom。json数据结构的key(键值)为“class/classname”及“name”,key值所对应的value值为“数学”和“tom”,采用深度优先遍历可以获取到遍历路径,在这里遍历路径就是key值。
步骤S20,将所述解析数据存储至数据库表,所述解析数据包括遍历路径。
进一步的,步骤S20之前还包括步骤S210配置数据库表字段的数据格式。
具体的,通过数据库配置表配置数据格式,参考图3,数据库配置表可以包括以下字段:数据节点、节点名称、父数据节点、数据类型、数据长度、数据状态、日期格式、节点顺序、表列名、表名。
遍历得到的解析数据例如数据节点、节点名称、父数据节点、节点顺序、表列名、表名等数据字段的具体数值存储至数据库表中。附图4提供了一种存储的样例数据库表供参考,附图3为附图4的数据格式配置表,其中,NODECODEPATH字段表示遍历路径即key值,NODECODE表示value值。
步骤S30,根据所述遍历路径查询所述数据库表,获取所述解析数据。
具体的,根据所述遍历路径查询上述存储的数据库表,得到key值,value值,父数据节点等解析数据。这种解析数据可以被java,c,python,c#等语言直接调用。
通过保存及查询数据库表获取json解析数据,可以提高代码复用性,降低了每次调用json数据的复杂性。
本实施例提供的计算机可读存储介质,在进行json数据解析时,避免了代码和json结构的耦合,从容应对json结构变化;避免递归可能导致的内存占用及栈溢出异常;降低了json解析难度,即使是不熟悉json也很容易上手;较大的提升了开发效率,该工具开发完成后,其他解析json的功能,无需写解析代码,无需写sql,只需创建数据库表。较好的改进了代码的复用性,该工具提取为工具类后,复用性大大提高;提升了测试效率,测试人员可以查询配置表,对json结构及落地数据对应的表一目了然,可以较快的熟悉json结构及排查问题。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种json数据解析方法,其特征在于,所述方法包括:
深度优先遍历json末端叶子节点数据,得到json解析数据;
将所述解析数据存储至数据库表,所述解析数据包括遍历路径;
根据所述遍历路径查询所述数据库表,获取所述解析数据。
2.如权利要求1所述的方法,其特征在于,步骤深度优先遍历json末端叶子节点数据,得到json解析数据,还包括:
抽取json节点数据,构建多叉树结构;
深度优先遍历所述多叉树结构。
3.如权利要求1所述的方法,其特征在于,步骤将遍历得到的解析数据存储至数据库表之前还包括步骤:
配置所述数据库表字段的数据格式。
4.如权利要求3所述的方法,其特征在于,通过数据库配置表配置数据,格式,所述数据库配置表包括字段:数据节点、节点名称、父数据节点、数据类型、数据长度、数据状态、日期格式、节点顺序、表列名、表名。
5.一种电子装置,其特征在于,所述电子装置包括存储器和处理器,所述存储器存储有可在所述处理器上运行的json数据解析程序,所述处理器在执行json数据解析程序时执行以下步骤:
深度优先遍历json末端叶子节点数据,得到json解析数据;
将所述解析数据存储至数据库表,所述解析数据包括遍历路径;
根据所述遍历路径查询所述数据库表,获取所述解析数据。
6.如权利要求5所述的方法,其特征在于,步骤深度优先遍历json末端叶子节点数据,得到json解析数据,还包括:
抽取json节点数据,构建多叉树结构;
深度优先遍历所述多叉树结构。
7.如权利要求5所述的电子装置,其特征在于,步骤将遍历得到的解析数据存储至数据库表之前还包括步骤:
配置所述数据库表的数据格式。
8.如权利要求7所述的电子装置,其特征在于,通过数据库配置表配置数据格式,所述数据库配置表包括字段:数据节点、节点名称、父数据节点、数据类型、数据长度、数据状态、日期格式、节点顺序、表列名、表名。
9.一种电子装置,其特征在于,包括:
遍历模块,用于深度优先遍历json末端叶子节点数据,得到json解析数据;
解析数据存储模块,用于所述解析数据存储至数据库表,所述解析数据包括遍历路径;
解析数据查询模块,用于根据所述遍历路径查询所述数据库表,获取所述解析数据。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有json数据解析程序,所述json数据解析程序可被一个或者多个处理器执行,以实现如权利要求1至4中任一项所述的json数据解析方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811250499.6A CN109558128A (zh) | 2018-10-25 | 2018-10-25 | json数据解析方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811250499.6A CN109558128A (zh) | 2018-10-25 | 2018-10-25 | json数据解析方法、装置及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109558128A true CN109558128A (zh) | 2019-04-02 |
Family
ID=65865035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811250499.6A Pending CN109558128A (zh) | 2018-10-25 | 2018-10-25 | json数据解析方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109558128A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110134681A (zh) * | 2019-04-15 | 2019-08-16 | 平安科技(深圳)有限公司 | 数据存储与查询方法、装置、计算机设备及存储介质 |
CN110554877A (zh) * | 2019-09-05 | 2019-12-10 | 北京博睿宏远数据科技股份有限公司 | 一种json数据解析方法、装置、设备及储存介质 |
CN111062790A (zh) * | 2019-11-15 | 2020-04-24 | 深圳供电局有限公司 | 一种基于企业内部审计成果的数据分析方法及系统 |
CN111061482A (zh) * | 2019-10-24 | 2020-04-24 | 贝壳技术有限公司 | 字符串中参数的解析方法、装置、存储介质及电子设备 |
CN111159146A (zh) * | 2019-12-06 | 2020-05-15 | 北京国电通网络技术有限公司 | 一种嵌入式数据库的处理方法及其装置 |
CN111460229A (zh) * | 2020-02-23 | 2020-07-28 | 华中科技大学 | 单用户多工作负载之间json解析优化方法和系统 |
CN111506781A (zh) * | 2020-04-21 | 2020-08-07 | 四川创智联恒科技有限公司 | 一种大幅压缩数据库体积的方法、系统、终端设备和可读存储介质 |
CN112328230A (zh) * | 2020-11-18 | 2021-02-05 | 恩亿科(北京)数据科技有限公司 | 一种Json语句解析方法、系统、电子设备及存储介质 |
CN114647649A (zh) * | 2022-05-13 | 2022-06-21 | 中电云数智科技有限公司 | 基于层序遍历的半结构化数据同步方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508880A (zh) * | 2011-10-18 | 2012-06-20 | 广东威创视讯科技股份有限公司 | 一种文件合并方法及分解方法 |
CN105278946A (zh) * | 2015-06-12 | 2016-01-27 | 浙江大学 | 一种RESTful API可视化方法 |
CN106254466A (zh) * | 2016-08-05 | 2016-12-21 | 河海大学常州校区 | 基于局域网的hdfs分布式文件共享方法 |
CN106897408A (zh) * | 2017-02-16 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种实现快速查询树形结构数据指定节点下级的方法 |
CN108288502A (zh) * | 2018-04-11 | 2018-07-17 | 平安科技(深圳)有限公司 | 疾病预测方法及装置、计算机装置及可读存储介质 |
-
2018
- 2018-10-25 CN CN201811250499.6A patent/CN109558128A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508880A (zh) * | 2011-10-18 | 2012-06-20 | 广东威创视讯科技股份有限公司 | 一种文件合并方法及分解方法 |
CN105278946A (zh) * | 2015-06-12 | 2016-01-27 | 浙江大学 | 一种RESTful API可视化方法 |
CN106254466A (zh) * | 2016-08-05 | 2016-12-21 | 河海大学常州校区 | 基于局域网的hdfs分布式文件共享方法 |
CN106897408A (zh) * | 2017-02-16 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种实现快速查询树形结构数据指定节点下级的方法 |
CN108288502A (zh) * | 2018-04-11 | 2018-07-17 | 平安科技(深圳)有限公司 | 疾病预测方法及装置、计算机装置及可读存储介质 |
Non-Patent Citations (1)
Title |
---|
许联国: "基于linux的多功能IPTV机顶盒软件设计", 中国优秀硕士学位论文全文数据库 信息科技辑 (月刊) 2016, vol. 136, no. 04, 15 April 2016 (2016-04-15), pages 51 - 63 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110134681A (zh) * | 2019-04-15 | 2019-08-16 | 平安科技(深圳)有限公司 | 数据存储与查询方法、装置、计算机设备及存储介质 |
CN110134681B (zh) * | 2019-04-15 | 2023-10-13 | 平安科技(深圳)有限公司 | 数据存储与查询方法、装置、计算机设备及存储介质 |
CN110554877A (zh) * | 2019-09-05 | 2019-12-10 | 北京博睿宏远数据科技股份有限公司 | 一种json数据解析方法、装置、设备及储存介质 |
CN111061482A (zh) * | 2019-10-24 | 2020-04-24 | 贝壳技术有限公司 | 字符串中参数的解析方法、装置、存储介质及电子设备 |
CN111061482B (zh) * | 2019-10-24 | 2023-12-08 | 贝壳技术有限公司 | 字符串中参数的解析方法、装置、存储介质及电子设备 |
CN111062790A (zh) * | 2019-11-15 | 2020-04-24 | 深圳供电局有限公司 | 一种基于企业内部审计成果的数据分析方法及系统 |
CN111159146A (zh) * | 2019-12-06 | 2020-05-15 | 北京国电通网络技术有限公司 | 一种嵌入式数据库的处理方法及其装置 |
CN111159146B (zh) * | 2019-12-06 | 2023-07-25 | 北京国电通网络技术有限公司 | 一种嵌入式数据库的处理方法及其装置 |
CN111460229B (zh) * | 2020-02-23 | 2023-06-09 | 华中科技大学 | 单用户多工作负载之间json解析优化方法和系统 |
CN111460229A (zh) * | 2020-02-23 | 2020-07-28 | 华中科技大学 | 单用户多工作负载之间json解析优化方法和系统 |
CN111506781A (zh) * | 2020-04-21 | 2020-08-07 | 四川创智联恒科技有限公司 | 一种大幅压缩数据库体积的方法、系统、终端设备和可读存储介质 |
CN112328230A (zh) * | 2020-11-18 | 2021-02-05 | 恩亿科(北京)数据科技有限公司 | 一种Json语句解析方法、系统、电子设备及存储介质 |
CN114647649A (zh) * | 2022-05-13 | 2022-06-21 | 中电云数智科技有限公司 | 基于层序遍历的半结构化数据同步方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109558128A (zh) | json数据解析方法、装置及计算机可读存储介质 | |
US10592319B2 (en) | API notebook tool | |
US10942708B2 (en) | Generating web API specification from online documentation | |
US9524283B2 (en) | Techniques to remotely access form information and generate a form | |
US20170169061A1 (en) | NoSQL RELATIONAL DATABASE (RDB) DATA MOVEMENT | |
US9842099B2 (en) | Asynchronous dashboard query prompting | |
CA2684822C (en) | Data transformation based on a technical design document | |
US8468145B2 (en) | Indexing of URLs with fragments | |
KR20180122017A (ko) | 실시간 데이터플로우 프로그래밍을 위한 효율적인 상태 머신 | |
US20140149836A1 (en) | Dashboard Visualizations Using Web Technologies | |
US20120159312A1 (en) | Representation of an interactive document as a graph of entities | |
CN111680253B (zh) | 页面应用数据包生成方法、装置、计算机设备及存储介质 | |
CN113126990B (zh) | 一种页面开发方法、装置、设备及存储介质 | |
CN114996619A (zh) | 一种页面显示的方法、装置、计算机设备及存储介质 | |
CN110147476A (zh) | 基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质 | |
CN106648569A (zh) | 目标序列化实现方法和装置 | |
US20170300461A1 (en) | Representation of an Interactive Document as a Graph of Entities | |
CN113761871A (zh) | 富文本渲染方法、装置、电子设备以及存储介质 | |
CN112035092A (zh) | 一种表单的处理方法、装置、设备和可读介质 | |
CN111177089A (zh) | 日志处理代码的生成方法和装置、计算机系统和存储介质 | |
US10769355B2 (en) | Managing extended schemas | |
CN116860286A (zh) | 页面动态更新方法、装置、电子设备和计算机可读介质 | |
CN111124541A (zh) | 一种配置文件的生成方法、装置、设备及介质 | |
US20160070564A1 (en) | Dynamically schematized log messages for software applications | |
CN113395292B (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 |