一种任意层次json对象的解析与生成方法及系统的制作方法

文档序号:6632535阅读:192来源:国知局
一种任意层次json对象的解析与生成方法及系统的制作方法
【专利摘要】本发明涉及一种任意层次json对象的解析与生成方法及系统,其方法包括以下步骤:步骤1:定义一个对象数组,所述对象数组中的每个对象是对json一个节点的描述;步骤2:对json内的层次进行定义,得到一个句柄;步骤3:选择对象数组和一个句柄为基础,采用lexPath方法解析,得到一个有序数组;步骤4:判断有序数组是否与需操作的节点存在对应关系;如果是,执行步骤5;否则,执行步骤3;步骤5:获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。本发明简化json解析于生成的开发流程,使得代码更加通俗易懂,节约开发与维护人工成本。
【专利说明】一种任意层次json对象的解析与生成方法及系统

【技术领域】
[0001]本发明涉及一种任意层次json对象的解析与生成方法及系统,属于软件【技术领域】。

【背景技术】
[0002]随着软件行业的发展,通讯变的越来越重要,而随之而来的通讯采用的数据交换格式也越来越多,如现在主流的xml格式,那么随着数据交换格式的发展,一种轻量级的数据交换格式,json随之而来,JSON(JavaScript Object Notat1n)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。跟XML相比,JSON的优势在于格式简洁短小,特别是在处理大量复杂数据的时候,这个优势便显得非常突出。
[0003]随着json成为了数据格式的主流,各语言对json的支持也越来越成熟,C语言也有自己的json库函数,json-c,那么json-c中提供了大量对json解析和生成的函数,但json与xml —样,都是无序多层的数据结构,所以json-c中对于多层的json数据格式并没有提供简单的单函数实现,而是需要开发人员根据基本的库函数写出算法解析或者生成,过程比较繁琐。


【发明内容】

[0004]本发明所要解决的技术问题是,针对针对现有技术过程繁琐的缺点,提供一种对外统一的方法,支持任意层次任意json对象的解析与生成的任意层次json对象的解析与生成方法。
[0005]本发明解决上述技术问题的技术方案如下:一种任意层次json对象的解析与生成方法,具体包括以下步骤:
[0006]步骤1:定义一个对象数组,所述对象数组中的每个对象是对json—个节点的描述;
[0007]步骤2:对整体json内的层次进行定义,得到一个句柄;
[0008]步骤3:选择对象数组和一个句柄为基础,采用IexPath方法解析,得到一个有序数组;
[0009]步骤4:判断有序数组是否与需操作的节点存在对应关系;如果是,执行步骤5 ;否贝U,执行步骤3;
[0010]步骤5:获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。
[0011]本发明的有益效果是:本发明简化json解析于生成的开发流程,使得代码更加通俗易懂,节约开发与维护人工成本。
[0012]在上述技术方案的基础上,本发明还可以做如下改进。
[0013]进一步,所述步骤5具体包括以下步骤:
[0014]步骤5.1:获取需要操作的节点的类型;
[0015]步骤5.2:判断需要进行解析还是生成,如果是解析,执行步骤5.3 ;否则,执行步骤 5.4 ;
[0016]步骤5.3:根据节点的类型调用json中对应的api完成解析功能;
[0017]步骤5.4:根据节点的类型调用json中对应的api完成生成功能。
[0018]进一步,所述步骤I中每个对象对json的一个节点的描述包括节点名和节点类型。
[0019]进一步,所述IexPath方法具体包括以下步骤:
[0020]步骤3.1:对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
[0021]步骤3.2:将上述节点名对应的多个节点封装成对象后依次的放入对象数组中;
[0022]步骤3.3:得到有序数组。
[0023]本发明所要解决的技术问题是,针对针对现有技术过程繁琐的缺点,提供一种对外统一的方法,支持任意层次任意json对象的解析与生成的任意层次json对象的解析与生成系统。
[0024]本发明解决上述技术问题的技术方案如下:一种任意层次json对象的解析与生成系统,包括:定义模块、层次模块、解析模块、判断模块和操作模块;
[0025]所述定义模块用于定义一个对象数组,所述对象数组中的每个对象是对json —个节点的描述;
[0026]所述层次模块用于对整体json内的层次进行定义,得到一个句柄;
[0027]所述解析模块用于选择对象数组和一个句柄为基础,采用IexPath方法解析,得到一个有序数组;
[0028]所述判断模块用于判断有序数组是否与需操作的节点存在对应关系;如果是,触发操作模块;否则,触发解析模块;
[0029]所述操作模块用于获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。
[0030]本发明的有益效果是:本发明简化json解析于生成的开发流程,使得代码更加通俗易懂,节约开发与维护人工成本。
[0031]在上述技术方案的基础上,本发明还可以做如下改进。
[0032]进一步,所述操作模块包括节点判断模块、操作判断模块、解析模块和生成模块;
[0033]所述节点判断模块用于获取需要操作的节点的类型;
[0034]所述操作判断模块用于判断需要进行解析还是生成,如果是解析,触发解析模块;否则,触发生成模块;
[0035]所述解析模块用于根据节点的类型调用json中对应的api完成解析功能;
[0036]所述生成模块用于根据节点的类型调用json中对应的api完成生成功能。
[0037]进一步,所述定义模块中每个对象对json的一个节点的描述包括节点名和节点类型。
[0038]进一步,所述解析模块包括句柄解析模块和封装模块;
[0039]所述句柄解析模块用于对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
[0040]所述封装模块用于将上述节点名对应的多个节点封装成对象后依次的放入对象数组中,得到有序数组。

【专利附图】

【附图说明】
[0041]图1为本发明所述的一种任意层次json对象的解析与生成方法流程图;
[0042]图2为本发明所述的一种任意层次json对象的解析与生成系统结构框图。
[0043]附图中,各标号所代表的部件列表如下:
[0044]1、定义模块,2、层次模块,3、解析模块,4、判断模块,5、操作模块,31、句柄解析模块,32、封装模块,51、节点判断模块,52、操作判断模块,53、解析模块,54、生成模块。

【具体实施方式】
[0045]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0046]如图1所示,为本发明所述的一种任意层次json对象的解析与生成方法,具体包括以下步骤:
[0047]步骤1:定义一个对象数组,所述对象数组中的每个对象是对json—个节点的描述;
[0048]步骤2:对整体json内的层次进行定义,得到一个句柄;
[0049]步骤3:选择对象数组和一个句柄为基础,对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
[0050]步骤4:将上述节点名对应的多个节点封装成对象后依次的放入对象数组中;
[0051]步骤5:得到有序数组;
[0052]步骤6:判断有序数组是否与需操作的节点存在对应关系;如果是,执行步骤7 ;否贝U,执行步骤3;
[0053]步骤7:获取需要操作的节点的类型;
[0054]步骤8:判断需要进行解析还是生成,如果是解析,执行步骤9 ;否则,执行步骤10 ;
[0055]步骤9:根据节点的类型调用json中对应的api完成解析功能;
[0056]步骤10:根据节点的类型调用json中对应的api完成生成功能。
[0057]所述步骤I中每个对象对json的一个节点的描述包括节点名和节点类型。
[0058]如图2所示,为本发明所是的一种任意层次json对象的解析与生成系统,包括:定义模块1、层次模块2、解析模块3、判断模块4和操作模块5 ;
[0059]所述定义模块I用于定义一个对象数组,所述对象数组中的每个对象是对json —个节点的描述;
[0060]所述层次模块2用于对整体json内的层次进行定义,得到一个句柄;
[0061]所述解析模块3用于选择对象数组和一个句柄为基础,采用IexPath方法解析,得到一个有序数组;
[0062]所述判断模块4用于判断有序数组是否与需操作的节点存在对应关系;如果是,触发操作模块5 ;否则,触发解析模块3 ;
[0063]所述操作模块5用于获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。
[0064]所述操作模块5包括节点判断模块51、操作判断模块52、解析模块53和生成模块54;
[0065]所述节点判断模块51用于获取需要操作的节点的类型;
[0066]所述操作判断模块52用于判断需要进行解析还是生成,如果是解析,触发解析模块53 ;否则,触发生成模块54 ;
[0067]所述解析模块53用于根据节点的类型调用json中对应的api完成解析功能;
[0068]所述生成模块54用于根据节点的类型调用json中对应的api完成生成功能。
[0069]所述定义模块I中每个对象对json的一个节点的描述包括节点名和节点类型。
[0070]所述解析模块3包括句柄解析模块31和封装模块32 ;
[0071]所述句柄解析模块31用于对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
[0072]所述封装模块32用于将上述节点名对应的多个节点封装成对象后依次的放入对象数组中,得到有序数组。
[0073]本发明支持任意层次任意json对象的解析与生成,支持对任意数据类型提供统一的json解析与生成方式。
[0074]l、json解析工具(json_property)中定义了一个对象数组,那么数组中的每一个对象是对json —个节点的描述,其中包括节点名与节点类型。
[0075]2、j son解析工具(j son_property)中对j son对象的层次做了一个定义,以“this”开头,this表示是json对象的根节点,以每一个层的节点名作为句柄如果该层的节点是一个数组那么在节点名后面用“[]”中加数据表示是数组的第几个元素,以为”作为每一个层次的句柄连接符拼成完整的json对象的句柄,具体举例说明:
[0076]Json: { ‘people,:,张三,,’property,: { ‘age,:,24,}}这个 json 中有 2 层第一个层是string类型的节点名是people,还有一个是一个对象节点名是property,第2层中这个对象有一个节点是string的节点是age那么如果想得到这个json中的age值那么句柄应为:this.Property, age。
[0077]3、json解析工具(json_property)根据上述的json自定义句柄与对象数组,使用其中的一个核心的方法lexPath,方法中实现是将json句柄解析,得到每一个节点的名字和类型,然后将节点封装成对象顺序的放入对象的数组中,这样最终可以将整个句柄转化为一个有序的数组。
[0078]4、json解析工具(json_property)中另外的两个核心方法getJsonObject,setJsonObject,分别实现了 json对象的解析和生成,主要的工作原理就是调用上述的IexPath方法将句柄转化为数组,然后循环数组直至得到要解析或者生成的节点,调用json-c中的api完成解析或者生成功能。
[0079]此外这2个方法中的另一个核心功能是将各个对象的解析生成api收敛,对外暴漏统一方法,其中原理是在调用json-c中的api完成解析或者生成功能之前,先判断此节点的类型,然后根据不同的类型调用不同的api完成功能。
[0080]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种任意层次json对象的解析与生成方法,其特征在于,具体包括以下步骤: 步骤1:定义一个对象数组,所述对象数组中的每个对象是对json —个节点的描述; 步骤2:对整体json内的层次进行定义,得到一个句柄; 步骤3:选择对象数组和一个句柄为基础,采用IexPath方法解析,得到一个有序数组; 步骤4:判断有序数组是否与需操作的节点存在对应关系;如果是,执行步骤5 ;否则,执行步骤3 ; 步骤5:获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。
2.根据权利要求1所述的一种任意层次json对象的解析与生成方法,其特征在于,所述步骤5具体包括以下步骤: 步骤5.1:获取需要操作的节点的类型; 步骤5.2:判断需要进行解析还是生成,如果是解析,执行步骤5.3 ;否则,执行步骤5.4 ; 步骤5.3:根据节点的类型调用json中对应的api完成解析功能; 步骤5.4:根据节点的类型调用json中对应的api完成生成功能。
3.根据权利要求2所述的一种任意层次json对象的解析与生成方法,其特征在于,所述步骤I中每个对象对json的一个节点的描述包括节点名和节点类型。
4.根据权利要求1-3任一项所述的一种任意层次json对象的解析与生成方法,其特征在于,所述IexPath方法具体包括以下步骤: 步骤3.1:对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型; 步骤3.2:将上述节点名对应的多个节点封装成对象后依次的放入对象数组中; 步骤3.3:得到有序数组。
5.一种任意层次json对象的解析与生成系统,包括:定义模块、层次模块、解析模块、判断模块和操作模块; 所述定义模块用于定义一个对象数组,所述对象数组中的每个对象是对json —个节点的描述; 所述层次模块用于对整体json内的层次进行定义,得到一个句柄; 所述解析模块用于选择对象数组和一个句柄为基础,采用IexPath方法解析,得到一个有序数组; 所述判断模块用于判断有序数组是否与需操作的节点存在对应关系;如果是,触发操作模块;否则,触发解析模块; 所述操作模块用于获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。
6.根据权利要求5所述的一种任意层次json对象的解析与生成系统,其特征在于,所述操作模块包括节点判断模块、操作判断模块、解析模块和生成模块; 所述节点判断模块用于获取需要操作的节点的类型; 所述操作判断模块用于判断需要进行解析还是生成,如果是解析,触发解析模块;否贝U,触发生成模块; 所述解析模块用于根据节点的类型调用json中对应的api完成解析功能; 所述生成模块用于根据节点的类型调用json中对应的api完成生成功能。
7.根据权利要求6所述的一种任意层次json对象的解析与生成系统,其特征在于,所述定义模块中每个对象对json的一个节点的描述包括节点名和节点类型。
8.根据权利要求5-7任一项所述的一种任意层次json对象的解析与生成系统,其特征在于,所述解析模块包括句柄解析模块和封装模块; 所述句柄解析模块用于对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型; 所述封装模块用于将上述节点名对应的多个节点封装成对象后依次的放入对象数组中,得到有序数组。
【文档编号】G06F9/45GK104331315SQ201410601883
【公开日】2015年2月4日 申请日期:2014年10月31日 优先权日:2014年10月31日
【发明者】蒋磊 申请人:北京思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1