CN104331315B - 一种任意层次json对象的解析与生成方法及系统 - Google Patents
一种任意层次json对象的解析与生成方法及系统 Download PDFInfo
- Publication number
- CN104331315B CN104331315B CN201410601883.1A CN201410601883A CN104331315B CN 104331315 B CN104331315 B CN 104331315B CN 201410601883 A CN201410601883 A CN 201410601883A CN 104331315 B CN104331315 B CN 104331315B
- Authority
- CN
- China
- Prior art keywords
- node
- json
- module
- parsing
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种任意层次json对象的解析与生成方法及系统,其方法包括以下步骤:步骤1:定义一个对象数组,所述对象数组中的每个对象是对json一个节点的描述;步骤2:对json内的层次进行定义,得到一个句柄;步骤3:选择对象数组和一个句柄为基础,采用lexPath方法解析,得到一个有序数组;步骤4:判断有序数组是否与需操作的节点存在对应关系;如果是,执行步骤5;否则,执行步骤3;步骤5:获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。本发明简化json解析于生成的开发流程,使得代码更加通俗易懂,节约开发与维护人工成本。
Description
技术领域
本发明涉及一种任意层次json对象的解析与生成方法及系统,属于软件技术领域。
背景技术
随着软件行业的发展,通讯变的越来越重要,而随之而来的通讯采用的数据交换格式也越来越多,如现在主流的xml格式,那么随着数据交换格式的发展,一种轻量级的数据交换格式,json随之而来,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。跟XML相比,JSON的优势在于格式简洁短小,特别是在处理大量复杂数据的时候,这个优势便显得非常突出。
随着json成为了数据格式的主流,各语言对json的支持也越来越成熟,C语言也有自己的json库函数,json-c,那么json-c中提供了大量对json解析和生成的函数,但json与xml一样,都是无序多层的数据结构,所以json-c中对于多层的json数据格式并没有提供简单的单函数实现,而是需要开发人员根据基本的库函数写出算法解析或者生成,过程比较繁琐。
发明内容
本发明所要解决的技术问题是,针对针对现有技术过程繁琐的缺点,提供一种对外统一的方法,支持任意层次任意json对象的解析与生成的任意层次json对象的解析与生成方法。
本发明解决上述技术问题的技术方案如下:一种任意层次json对象的解析与生成方法,具体包括以下步骤:
步骤1:定义一个对象数组,所述对象数组中的每个对象是对json一个节点的描述;
步骤2:对整体json内的层次进行定义,得到一个句柄;
步骤3:选择对象数组和一个句柄为基础,采用lexPath方法解析,得到一个有序数组;
步骤4:判断有序数组是否与需操作的节点存在对应关系;如果是,执行步骤5;否则,执行步骤3;
步骤5:获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。
本发明的有益效果是:本发明简化json解析于生成的开发流程,使得代码更加通俗易懂,节约开发与维护人工成本。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述步骤5具体包括以下步骤:
步骤5.1:获取需要操作的节点的类型;
步骤5.2:判断需要进行解析还是生成,如果是解析,执行步骤5.3;否则,执行步骤5.4;
步骤5.3:根据节点的类型调用json中对应的api完成解析功能;
步骤5.4:根据节点的类型调用json中对应的api完成生成功能。
进一步,所述步骤1中每个对象对json的一个节点的描述包括节点名和节点类型。
进一步,所述lexPath方法具体包括以下步骤:
步骤3.1:对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
步骤3.2:将上述节点名对应的多个节点封装成对象后依次的放入对象数组中;
步骤3.3:得到有序数组。
本发明所要解决的技术问题是,针对针对现有技术过程繁琐的缺点,提供一种对外统一的方法,支持任意层次任意json对象的解析与生成的任意层次json对象的解析与生成系统。
本发明解决上述技术问题的技术方案如下:一种任意层次json对象的解析与生成系统,包括:定义模块、层次模块、解析模块、判断模块和操作模块;
所述定义模块用于定义一个对象数组,所述对象数组中的每个对象是对json一个节点的描述;
所述层次模块用于对整体json内的层次进行定义,得到一个句柄;
所述解析模块用于选择对象数组和一个句柄为基础,采用lexPath方法解析,得到一个有序数组;
所述判断模块用于判断有序数组是否与需操作的节点存在对应关系;如果是,触发操作模块;否则,触发解析模块;
所述操作模块用于获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。
本发明的有益效果是:本发明简化json解析于生成的开发流程,使得代码更加通俗易懂,节约开发与维护人工成本。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述操作模块包括节点判断模块、操作判断模块、解析模块和生成模块;
所述节点判断模块用于获取需要操作的节点的类型;
所述操作判断模块用于判断需要进行解析还是生成,如果是解析,触发解析模块;否则,触发生成模块;
所述解析模块用于根据节点的类型调用json中对应的api完成解析功能;
所述生成模块用于根据节点的类型调用json中对应的api完成生成功能。
进一步,所述定义模块中每个对象对json的一个节点的描述包括节点名和节点类型。
进一步,所述解析模块包括句柄解析模块和封装模块;
所述句柄解析模块用于对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
所述封装模块用于将上述节点名对应的多个节点封装成对象后依次的放入对象数组中,得到有序数组。
附图说明
图1为本发明所述的一种任意层次json对象的解析与生成方法流程图;
图2为本发明所述的一种任意层次json对象的解析与生成系统结构框图。
附图中,各标号所代表的部件列表如下:
1、定义模块,2、层次模块,3、解析模块,4、判断模块,5、操作模块,31、句柄解析模块,32、封装模块,51、节点判断模块,52、操作判断模块,53、解析模块,54、生成模块。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,为本发明所述的一种任意层次json对象的解析与生成方法,具体包括以下步骤:
步骤1:定义一个对象数组,所述对象数组中的每个对象是对json一个节点的描述;
步骤2:对整体json内的层次进行定义,得到一个句柄;
步骤3:选择对象数组和一个句柄为基础,对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
步骤4:将上述节点名对应的多个节点封装成对象后依次的放入对象数组中;
步骤5:得到有序数组;
步骤6:判断有序数组是否与需操作的节点存在对应关系;如果是,执行步骤7;否则,执行步骤3;
步骤7:获取需要操作的节点的类型;
步骤8:判断需要进行解析还是生成,如果是解析,执行步骤9;否则,执行步骤10;
步骤9:根据节点的类型调用json中对应的api完成解析功能;
步骤10:根据节点的类型调用json中对应的api完成生成功能。
所述步骤1中每个对象对json的一个节点的描述包括节点名和节点类型。
如图2所示,为本发明所是的一种任意层次json对象的解析与生成系统,包括:定义模块1、层次模块2、解析模块3、判断模块4和操作模块5;
所述定义模块1用于定义一个对象数组,所述对象数组中的每个对象是对json一个节点的描述;
所述层次模块2用于对整体json内的层次进行定义,得到一个句柄;
所述解析模块3用于选择对象数组和一个句柄为基础,采用lexPath方法解析,得到一个有序数组;
所述判断模块4用于判断有序数组是否与需操作的节点存在对应关系;如果是,触发操作模块5;否则,触发解析模块3;
所述操作模块5用于获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。
所述操作模块5包括节点判断模块51、操作判断模块52、解析模块53和生成模块54;
所述节点判断模块51用于获取需要操作的节点的类型;
所述操作判断模块52用于判断需要进行解析还是生成,如果是解析,触发解析模块53;否则,触发生成模块54;
所述解析模块53用于根据节点的类型调用json中对应的api完成解析功能;
所述生成模块54用于根据节点的类型调用json中对应的api完成生成功能。
所述定义模块1中每个对象对json的一个节点的描述包括节点名和节点类型。
所述解析模块3包括句柄解析模块31和封装模块32;
所述句柄解析模块31用于对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
所述封装模块32用于将上述节点名对应的多个节点封装成对象后依次的放入对象数组中,得到有序数组。
本发明支持任意层次任意json对象的解析与生成,支持对任意数据类型提供统一的json解析与生成方式。
1、json解析工具(json_property)中定义了一个对象数组,那么数组中的每一个对象是对json一个节点的描述,其中包括节点名与节点类型。
2、json解析工具(json_property)中对json对象的层次做了一个定义,以“this”开头,this表示是json对象的根节点,以每一个层的节点名作为句柄如果该层的节点是一个数组那么在节点名后面用“[]”中加数据表示是数组的第几个元素,以为“.”作为每一个层次的句柄连接符拼成完整的json对象的句柄,具体举例说明:
Json:{‘people’:’张三’,’property’:{‘age’:’24’}}这个json中有2层第一个层是string类型的节点名是people,还有一个是一个对象节点名是property,第2层中这个对象有一个节点是string的节点是age那么如果想得到这个json中的age值那么句柄应为:this.Property.age。
3、json解析工具(json_property)根据上述的json自定义句柄与对象数组,使用其中的一个核心的方法lexPath,方法中实现是将json句柄解析,得到每一个节点的名字和类型,然后将节点封装成对象顺序的放入对象的数组中,这样最终可以将整个句柄转化为一个有序的数组。
4、json解析工具(json_property)中另外的两个核心方法getJsonObject,setJsonObject,分别实现了json对象的解析和生成,主要的工作原理就是调用上述的lexPath方法将句柄转化为数组,然后循环数组直至得到要解析或者生成的节点,调用json-c中的api完成解析或者生成功能。
此外这2个方法中的另一个核心功能是将各个对象的解析生成api收敛,对外暴漏统一方法,其中原理是在调用json-c中的api完成解析或者生成功能之前,先判断此节点的类型,然后根据不同的类型调用不同的api完成功能。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种任意层次json对象的解析与生成方法,其特征在于,具体包括以下步骤:
步骤1:定义一个对象数组,所述对象数组中的每个对象是对json一个节点的描述;
步骤2:对整体json内的层次进行定义,得到一个句柄;
步骤3:选择对象数组和一个句柄为基础,采用lexPath方法解析,得到一个有序数组;
所述lexPath方法是将json句柄解析,得到每一个节点的名字和类型,然后将节点封装成对象顺序的放入对象的数组中,最终将整个句柄转化为一个有序数组;
步骤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对象的解析与生成方法,其特征在于,所述步骤1中每个对象对json的一个节点的描述包括节点名和节点类型。
4.根据权利要求1-3任一项所述的一种任意层次json对象的解析与生成方法,其特征在于,所述lexPath方法具体包括以下步骤:
步骤3.1:对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
步骤3.2:将上述节点名对应的多个节点封装成对象后依次的放入对象数组中;
步骤3.3:得到有序数组。
5.一种任意层次json对象的解析与生成系统,包括:定义模块、层次模块、解析模块、判断模块和操作模块;
所述定义模块用于定义一个对象数组,所述对象数组中的每个对象是对json一个节点的描述;
所述层次模块用于对整体json内的层次进行定义,得到一个句柄;
所述解析模块用于选择对象数组和一个句柄为基础,采用lexPath方法解析,得到一个有序数组;
所述lexPath方法是将json句柄解析,得到每一个节点的名字和类型,然后将节点封装成对象顺序的放入对象的数组中,最终将整个句柄转化为一个有序数组;
所述判断模块用于判断有序数组是否与需操作的节点存在对应关系;如果是,触发操作模块;否则,触发解析模块;
所述操作模块用于获取需要操作的节点的类型,根据节点的类型调用json中对应的api应用程序编程接口完成解析功能或者生成功能。
6.根据权利要求5所述的一种任意层次json对象的解析与生成系统,其特征在于,所述操作模块包括节点判断模块、操作判断模块、解析模块和生成模块;
所述节点判断模块用于获取需要操作的节点的类型;
所述操作判断模块用于判断需要进行解析还是生成,如果是解析,触发解析模块;否则,触发生成模块;
所述解析模块用于根据节点的类型调用json中对应的api完成解析功能;
所述生成模块用于根据节点的类型调用json中对应的api完成生成功能。
7.根据权利要求6所述的一种任意层次json对象的解析与生成系统,其特征在于,所述定义模块中每个对象对json的一个节点的描述包括节点名和节点类型。
8.根据权利要求5-7任一项所述的一种任意层次json对象的解析与生成系统,其特征在于,所述解析模块包括句柄解析模块和封装模块;
所述句柄解析模块用于对一个句柄进行解析,得到对应所述句柄对应的每一个节点名和节点类型;
所述封装模块用于将上述节点名对应的多个节点封装成对象后依次的放入对象数组中,得到有序数组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410601883.1A CN104331315B (zh) | 2014-10-31 | 2014-10-31 | 一种任意层次json对象的解析与生成方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410601883.1A CN104331315B (zh) | 2014-10-31 | 2014-10-31 | 一种任意层次json对象的解析与生成方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104331315A CN104331315A (zh) | 2015-02-04 |
CN104331315B true CN104331315B (zh) | 2017-10-17 |
Family
ID=52406049
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410601883.1A Active CN104331315B (zh) | 2014-10-31 | 2014-10-31 | 一种任意层次json对象的解析与生成方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104331315B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045580A (zh) * | 2015-06-30 | 2015-11-11 | 广州支点网络科技有限公司 | 一种复合行为驱动方法及装置 |
CN106802797A (zh) * | 2016-12-28 | 2017-06-06 | 微景天下(北京)科技有限公司 | 一种应用程序编程接口的生成方法及装置 |
CN107220096A (zh) * | 2017-04-20 | 2017-09-29 | 北京小度信息科技有限公司 | 一种json数据解析方法及装置 |
CN108008936B (zh) * | 2017-12-04 | 2021-03-19 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及电子设备 |
CN109062560B (zh) * | 2018-07-25 | 2022-05-20 | 北京百度网讯科技有限公司 | 用于生成信息的方法和装置 |
CN112416330A (zh) * | 2020-11-23 | 2021-02-26 | 迷你学文化(深圳)有限公司 | 图形化编程方法、装置、电子设备及存储介质 |
CN112836475A (zh) * | 2020-11-24 | 2021-05-25 | 辽宁振兴银行股份有限公司 | 一种混合json和xml数据转为二维数组的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102446221A (zh) * | 2011-12-22 | 2012-05-09 | 南京联创科技集团股份有限公司 | Bs结构软件中的动态树型结构目录检索方法 |
CN103593194A (zh) * | 2013-11-21 | 2014-02-19 | 北京国双科技有限公司 | 对象序列化方法和装置 |
CN103605518A (zh) * | 2013-11-19 | 2014-02-26 | 北京国双科技有限公司 | 对象反序列化方法和装置 |
CN103677952A (zh) * | 2013-12-18 | 2014-03-26 | 华为技术有限公司 | 编解码器生成装置及方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8260784B2 (en) * | 2009-02-13 | 2012-09-04 | International Business Machines Corporation | Indexing and searching JSON objects |
US8874600B2 (en) * | 2010-01-30 | 2014-10-28 | International Business Machines Corporation | System and method for building a cloud aware massive data analytics solution background |
US9639631B2 (en) * | 2013-02-27 | 2017-05-02 | Cellco Partnership | Converting XML to JSON with configurable output |
-
2014
- 2014-10-31 CN CN201410601883.1A patent/CN104331315B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102446221A (zh) * | 2011-12-22 | 2012-05-09 | 南京联创科技集团股份有限公司 | Bs结构软件中的动态树型结构目录检索方法 |
CN103605518A (zh) * | 2013-11-19 | 2014-02-26 | 北京国双科技有限公司 | 对象反序列化方法和装置 |
CN103593194A (zh) * | 2013-11-21 | 2014-02-19 | 北京国双科技有限公司 | 对象序列化方法和装置 |
CN103677952A (zh) * | 2013-12-18 | 2014-03-26 | 华为技术有限公司 | 编解码器生成装置及方法 |
Non-Patent Citations (1)
Title |
---|
《一种基于DOM的XML解析器的设计与实现》;赵辉;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20051115;第22-33页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104331315A (zh) | 2015-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104331315B (zh) | 一种任意层次json对象的解析与生成方法及系统 | |
CN106022483B (zh) | 机器学习模型之间进行转换的方法与设备 | |
US10942922B2 (en) | Generation of data flow from syntax tree | |
Jenkins et al. | Software architecture graphs as complex networks: A novel partitioning scheme to measure stability and evolution | |
CN110192210A (zh) | 构建和处理用于动态结构化机器学习模型的计算图 | |
US20150355891A1 (en) | Computer-based distribution of large sets of regular expressions to a fixed number of state machine engines for products and services | |
CN106293664A (zh) | 代码生成方法及装置 | |
He et al. | Model approach to grammatical evolution: deep-structured analyzing of model and representation | |
CN107480053A (zh) | 一种软件测试数据生成方法及装置 | |
CN104410538A (zh) | 一种网络拓扑结构管理方法及系统 | |
CN103902256B (zh) | 一种界面的生成系统和方法 | |
CN109471626A (zh) | 页面逻辑结构、页面生成方法、页面数据处理方法及装置 | |
CN108829884A (zh) | 数据映射方法及装置 | |
CN109933331A (zh) | 一种客户端服务器间数据转换方法及相关组件 | |
CN108134812A (zh) | 数据处理方法和装置 | |
CN106502770A (zh) | 一种基于有限状态机的hmi状态迁移方法 | |
CN104063231B (zh) | 一种基于hit‑tena的试验资源快速接入方法 | |
CN103593188B (zh) | 一种用于仪器所见即所得菜单的管理系统及管理方法 | |
CN108628604A (zh) | Soa请求报文的参数值生成方法及系统 | |
CN112926008B (zh) | 生成表单页面的方法、装置、电子设备和存储介质 | |
Gómez Canaval et al. | NPEPE: Massive natural computing engine for optimally solving NP-complete problems in Big Data scenarios | |
US20150331974A1 (en) | Product configuration | |
CN105338104B (zh) | 业务请求响应方法、解析方法和系统 | |
CN107665124A (zh) | 模块化JavaScript文件处理方法、设备和服务器 | |
CN109032576A (zh) | 一种基于配置的跨平台应用生成方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |