CN113138755A - 一种json序列化和反序列化的优化方法及*** - Google Patents
一种json序列化和反序列化的优化方法及*** Download PDFInfo
- Publication number
- CN113138755A CN113138755A CN202110419119.2A CN202110419119A CN113138755A CN 113138755 A CN113138755 A CN 113138755A CN 202110419119 A CN202110419119 A CN 202110419119A CN 113138755 A CN113138755 A CN 113138755A
- Authority
- CN
- China
- Prior art keywords
- json
- attribute
- class
- serialization
- data
- 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 46
- 238000005457 optimization Methods 0.000 title claims abstract description 21
- 230000006870 function Effects 0.000 claims abstract description 54
- 238000012163 sequencing technique Methods 0.000 claims abstract description 5
- 238000006243 chemical reaction Methods 0.000 claims description 14
- 230000008569 process Effects 0.000 description 5
- 238000001514 detection method Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000005034 decoration Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 210000000988 bone and bone Anatomy 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
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/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及JSON序列化和反序列化优化技术领域,提供了一种JSON序列化和反序列化的优化方法及***,包括:创建用于对JSON序列化和反序列化优化的JSON对象抽象基类,在JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象;当对JSON执行反序列化操作时,通过JSON解析库对JSON数据进行解析,生成key‑va l ue格式的JSON对象键值对,进而通过调用JSON对象抽象基类创建包含JSON数据的所有属性成员的业务逻辑类,并对每个属性进行赋值;当对JSON执行序列化操作时,调用业务逻辑类,获取属性成员的具体值,形成key‑va l ue格式的JSON对象键值对,进而将JSON对象键值对,通过JSON解析库执行序列化操作,生成序列化后的JSON数据。
Description
技术领域
本发明涉及JSON序列化和反序列化优化的技术领域,尤其涉及一种JSON序列化和反序列化的优化方法及***。
背景技术
JSON是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。在软件开发编程中应用十分广泛。
序列化,是在软件编程过程中将高级语言(如C++)的类对象以字节的形式存储到磁盘中或者进行数据传输的方法。反序列化,即是将序列化后的字节对象还原为类对象的方法。在编程实践中以JSON作为数据存储格式,进行序列化和反序列化的方法被广泛的应用。
用JSON进行序列化操作时,需要将类对象的各个属性按照JSON的语法规范生成对应的JSON字符串,然后将字符串用户数据存储或传输。反序列化过程则需要安装JSON的语法规范对字符串进行解析,创建类对象,并为对象的各个属性进行赋值。
现有技术的劣势:
C++是一门面向对象的编程语言,在使用C++进行编程时,目前将C++对象用JSON做序列化和反序列化的方法有很多,如JsonCpp,RapidJSON,Parson,QT环境下的QJsonObject等数十种相关的类库。但这些方法大多只能做其方法指定的类对象与JSON数据格式之间的序列化和反序列化。比如QT环境下的JSON是用QjsonObject,QJsonValue等指定的类与JSON字符串进行相互转化,而JsonCpp只能在JSON字符串与Json::Value对象之间进行转换。这些固定的类对象只能以键值对(key-value)方式对属性进行读写,犹如一个黑盒子,没有公开的明确的对应JSON中包含的数据的属性。在实际的编程过程中,会存在如下几个方面的问题,尤其是在使用属性较多而且多重JSON对象嵌套的复杂的JSON数据时,这些问题会表现得尤为突出:
1、使用不方便,十分影响编程效率:编程人员不能在代码编辑器中直观的看到当前业务逻辑需要转换的JSON数据中存在哪些可以访问的属性对象,以及这些属性的值类型;
2、不利于多人协作:编程过程中使用JSON进行序列化和反序列化是为了进行数据交换,JSON数据格式可能由某个软件设计师进行定义,而使用JSON进行数据交换的软件编程人员可能不是前者,这使得编程人员必须完全了解或者很容易查询到JSON数据格式设定人员包含的结构和内容,这可能会导致大量的沟通或者编写以供查询的说明文档来解决这一问题,大大降低了多人合作的可靠性和效率。
3、容易出错,错误隐蔽,纠错困难:编程人员一旦写错或者写漏了JSON数据中对应的属性,代码编辑器无法在语法检测阶段就给出错误提示。在程序运行时也可能不会出现错误,但是会导致序列化后的JSON字符串中存储的数据是错误的,也会导致反序列化解析不出正确的属性值,从而导致与此JSON进行数据交换的一系列业务逻辑都使用了错误的数据,直到某个对数据敏感的业务逻辑发生错误,从而导致错误隐蔽,很难追溯到错误的源头,甚至对整个***造成严重的不良后果。
发明内容
针对上述问题,本发明的目的在于提供一种JSON序列化和反序列化的优化方法及***,在现有技术的基础上做了一系列关键性的改进,解决了对应问题,尤其是对属性较多而且多重JSON对象嵌套的复杂的JSON数据优势更加明显,其中主要体现在如下几个方面:
1、高效便利:为JSON数据中每个JSON对象定义了一个类,并且公开其对应JSON对象的属性,编程人员可以直观的看到对应数据格式包含的内容。通过代码编辑器的提示可以快速的编写对应的业务逻辑。
2、多人协作:定义JSON数据格式的软件设计师仅需要通过几个简单的宏定义就可以快速的设计好对应的类提供给其他编程人员使用。
3、不易出错:由于编程人员使用的已经是与JSON对应的类,代码编辑器或者编译器会在语法检测的时候就判断出业务逻辑的正确性,不会导致运行时才出现错误。
本发明的上述发明目的是通过以下技术方案得以实现的:
一种JSON序列化和反序列化的优化方法,包括:
创建用于对JSON序列化和反序列化优化的JSON对象抽象基类,在所述JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象;
当对JSON执行反序列化操作时,通过包括QJSON,JsonCpp,RapidJSON,Parson在内的JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,进而通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,并对每个属性进行赋值;
当对JSON执行序列化操作时,调用所述业务逻辑类,获取属性成员的具体值,形成key-value格式的所述JSON对象键值对,进而将所述JSON对象键值对,通过所述JSON解析库执行序列化操作,生成序列化后的JSON数据。
进一步地,在所述JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象,具体包括:
创建各类型属性的宏定义对象包括整型、浮点型、双精度型、布尔型、字符串型、字节型、数组、嵌套Json对象在内的全部常用的数据类型的定义方案,在所述业务逻辑类中直接使用宏定义对象创建对应的JSON数据结构中已有的属性类型;
对各个属性实现解析功能的宏定义对象包括初始化各个属性的公共函数的首与尾,以及为属性进行具体赋值的宏定义。
进一步地,在对JSON执行反序列化操作时,通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,具体为:
将所述JSON对象抽象基类作为公共类,当创建具体的所述JSON数据的所述业务逻辑类时,继承所述JSON对象抽象基类;
所述业务逻辑类继承所述JSON对象抽象基类后,直接调用所述JSON对象抽象基类中包含的所有宏定义。
进一步地,在所述JSON对象抽象基类中包含了用于初始化属性值的属性初始化虚函数,进而在所述业务逻辑类中对所述属性初始化虚函数的逻辑进行重写,使得在每个所述业务逻辑类中为具体的JSON数据的各个属性进行赋值。
进一步地,在所述业务逻辑类中,所述属性初始化虚函数的重新定义,通过包括定义执行初始化属性值函数开始段和定义执行初始化属性值函数结束段的两个宏定义进行执行体段落的限定;
包括在所述定义执行初始化属性值函数开始段,以及在所述定义执行初始化属性值函数结束段之间的片段为所述属性初始化虚函数的定义主体。
进一步地,通过定义的嵌套Json对象的宏定义对象,实现JSON对象的多重嵌套;
在创建所述业务逻辑类的包含多重嵌套的JSON对象的属性成员时,将属性成员的值通过其他的所述业务逻辑类定义的反序列化后的JSON数据进行赋值。
进一步地,定义统一转化接口,实现在反序列化操作时,调用所述JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,以及在序列化操作时,调用所述JSON解析库执行序列化操作,生成序列化后的JSON数据。
一种执行如上述的JSON序列化和反序列化的优化方法的***,包括:
抽象基础类创建模块,用于创建用于对JSON序列化和反序列化优化的JSON对象抽象基类,在所述JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象;
反序列化模块,用于当对JSON执行反序列化操作时,通过包括QJSON,JsonCpp,RapidJSON,Parson在内的JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,进而通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,并对每个属性进行赋值;
序列化模块,用于当对JSON执行序列化操作时,调用所述业务逻辑类,获取属性成员的具体值,形成key-value格式的所述JSON对象键值对,进而将所述JSON对象键值对,通过所述JSON解析库执行序列化操作,生成序列化后的JSON数据。
一种计算机设备,包括存储器和一个或多个处理器,所述存储器中存储有计算机代码,所述计算机代码被所述一个或多个处理器执行时,使得所述一个或多个处理器执行上述可视化UI样式设计方法。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,上述可视化UI样式设计方法被执行。
与现有技术相比,本发明包括以下至少一种有益效果是:
(1)通过提供一种JSON序列化和反序列化的优化方法,包括以下步骤:创建用于对JSON序列化和反序列化优化的JSON对象抽象基类,在所述JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象;当对JSON执行反序列化操作时,通过包括QJSON,JsonCpp,RapidJSON,Parson在内的JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,进而通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,并对每个属性进行赋值;当对JSON执行序列化操作时,调用所述业务逻辑类,获取属性成员的具体值,形成key-value格式的所述JSON对象键值对,进而将所述JSON对象键值对,通过所述JSON解析库执行序列化操作,生成序列化后的JSON数据。上述技术方案,通过预先定义一个用于生成JSON对象的抽象基类,针对于通过现有方法转化生成的key-value格式的JSON对象,进一步自动转换成具体的业务逻辑类进行存储,后续在进行编程时,通过代码编辑器的提示,编程人员可以直观的看到对应数据格式包含的内容,可以实现快速编写。同时便于多人协作,在转换成类之后,代码编辑器会在语法检测时直接判断出业务逻辑的正确性,不会导致运行时才出现错误。
(2)通过在JSON对象抽象基类中定义嵌套Json对象的宏定义对象,实现JSON对象的多重嵌套;在创建所述业务逻辑类的包含多重嵌套的JSON对象的属性成员时,将属性成员的值通过其他的所述业务逻辑类定义的反序列化后的JSON数据进行赋值。上述技术方案,能够对包含多重嵌套的JSON对象完整的转换成可被代码编辑器识别的多重嵌套的业务逻辑类。
附图说明
图1为本发明一种JSON序列化和反序列化的优化方法的整体流程图;
图2为本发明JSON反序列化的流程图;
图3为本发明JSON序列化的流程图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
本发明的主要思路为,在C++开发环境下,利用现有的JSON解析库,如QT下的QJsonObject,JsonCpp等完成底层的JSON序列化或者反序列化的操作,在此基础上封装一层逻辑,定义JSON对应的类,将其与这些类进行数据转换。本发明封装了这一转化过程,给出了对应C++类对象的创建方法,使得JSON数据人员定义的JSON数据能够直接映射为对应的C++类对象,从而达到直接将C++类与JSON之间进行序列化和反序列化的目的。以下通过实施例进行说明。
第一实施例
如图1所示,本实施例提供了一种JSON序列化和反序列化的优化方法,包括:
创建用于对JSON序列化和反序列化优化的JSON对象抽象基类,在所述JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象。
具体的,创建JSON对象抽象基类,后续根据JSON对象抽象基类,针对于具体的单个的JSON对象,将key-value格式的JSON对象通过继承JSON对象抽象基类的方式,重新定义生成针对于单个的JSON对象的业务逻辑类。当编程人员在对JSON对象进行访问调用时,无需去了解JSON对象里面的具体属性,通过代码编辑器可以直接通过语法提示的方式将所有的属性显示出来,方便多人协作,且不易出错。
在JSON对象抽象基础类中具体包含了创建各类型属性,以及对各个属性实现解析功能的两类宏定义对象。
(1)创建各类型属性的宏定义
创建各类型属性的宏定义对象包括整型、浮点型、双精度型、布尔型、字符串型、字节型、数组、嵌套Json对象在内的全部常用的数据类型的定义方案,在所述业务逻辑类中直接使用宏定义对象创建对应的JSON数据结构中已有的属性类型。由于这些属性被宏定义自动创建成功能的set/get函数,因此在编程时这些属性可以被直接代码编辑器作为语法提示,也可以被语法检测识别,即可以被显示的使用。举例如下表1所列举:
表1
其中,WJSON_PROP_OBJ(TYPE_OBJECT,PROP_NAME)是定义的嵌套Json对象的宏定义对象,实现JSON对象的多重嵌套;在创建所述业务逻辑类的包含多重嵌套的JSON对象的属性成员时,将属性成员的值通过其他的所述业务逻辑类定义的反序列化后的JSON数据进行赋值。
(2)对各个属性实现解析功能的宏定义
对各个属性实现解析功能的宏定义对象包括初始化各个属性的公共函数的首与尾,以及为属性进行具体赋值的宏定义。当统一转换接口从基础组件获取到对应的基础数据时,会调用此宏定义的函数,达到为当前类各个属性赋值的目的,实现反序列化。这些宏定义包含下表2所示的三个宏:
表2
其中,virtual void initProps(){}是用于初始化属性值的属性初始化虚函数,进而在所述业务逻辑类中对所述属性初始化虚函数的逻辑进行重写,使得在每个所述业务逻辑类中为具体的JSON数据的各个属性进行赋值。
并且,在所述业务逻辑类中,所述属性初始化虚函数的重新定义,通过包括定义执行初始化属性值函数开始段(INIT_PROPS)和定义执行初始化属性值函数结束段(END_INIT_PROPS)的两个宏定义进行执行体段落的限定;包括在所述定义执行初始化属性值函数开始段,以及在所述定义执行初始化属性值函数结束段之间的片段为所述属性初始化虚函数的定义主体。
在JSON对象抽象基类创建完成之后,通过JSON对象抽象基类的辅助执行JSON对象的反序列化和序列化操作。具体为:
(1)反序列化操作
如图2所示,当对JSON执行反序列化操作时,通过包括QJSON,JsonCpp,RapidJSON,Parson在内的JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,进而通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,并对每个属性进行赋值。
在对JSON执行反序列化操作时,通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,具体为:将所述JSON对象抽象基类作为公共类,当创建具体的所述JSON数据的所述业务逻辑类时,继承所述JSON对象抽象基类;所述业务逻辑类继承所述JSON对象抽象基类后,直接调用所述JSON对象抽象基类中包含的所有宏定义。
本发明中的JSON对象抽象基类实现了_initProps()虚函数,子类通过第二组宏定义重写此类函数的逻辑,使其在每个子类中的具体职责为给各个属性赋值,当统一转换接口从基础组件中提取到解析的JSON对象时,会调用_initProps()函数,然后此函数会调用子类在宏定义中指定的各个属性值解析的函数,从而实现将JSON数据中对应的属性值赋值给子类的各个属性,以实现反序列化。
(2)序列化操作
如图3所示,当对JSON执行序列化操作时,调用所述业务逻辑类,获取属性成员的具体值,形成key-value格式的所述JSON对象键值对,进而将所述JSON对象键值对,通过所述JSON解析库执行序列化操作,生成序列化后的JSON数据。
通过宏定义实现的子类属性赋值函数(set函数),每次会将对应的值直接提交给转换接口,转换接口将值写入基础组件的键值对类型对象中,在需要序列化的时候,调用转换接口提供的序列化函数,转换接口再调用基础组件提供的序列化方法即可完成序列化操作。
需要说明的是,通过包括QJSON,JsonCpp,RapidJSON,Parson在内的JSON解析库对JSON数据进行解析,JSON解析库为现有的支持C++与JSON转换的库作为序列化与反序列化的基础组件,且以上组件仅是举例,还可以包含其他的任意一种类似功能的组件。
同时,本发明提供的统一转换接口职责为:负责调用此组件提供的方法来获取到对应的以键值对作为数据访问方式的基础数据类型。具体为:
定义统一转化接口,实现在反序列化操作时,调用所述JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,以及在序列化操作时,调用所述JSON解析库执行序列化操作,生成序列化后的JSON数据。
第二实施例
本实施例提供了一种用宏定义JSON对应的子类的具体的使用举例。
比如有一个学生(Student)数据的JSON对象,其包含:编号(string ID),姓名(string Name),性别(bool Sex),年龄(int Age)。其json数据如下:
其对应定义一个Student类,其中WJsonObject为本发明提供的Json对象抽象基类,如下:
第三实施例
本实施例提供了一种执行如第一实施例中的JSON序列化和反序列化的优化方法的***,包括:
抽象基础类创建模块,用于创建用于对JSON序列化和反序列化优化的JSON对象抽象基类,在所述JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象;
反序列化模块,用于当对JSON执行反序列化操作时,通过包括QJSON,JsonCpp,RapidJSON,Parson在内的JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,进而通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,并对每个属性进行赋值;
序列化模块,用于当对JSON执行序列化操作时,调用所述业务逻辑类,获取属性成员的具体值,形成key-value格式的所述JSON对象键值对,进而将所述JSON对象键值对,通过所述JSON解析库执行序列化操作,生成序列化后的JSON数据。
一种计算机可读存储介质,计算机可读存储介质存储有计算机代码,当计算机代码被执行时,如上述方法被执行。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种JSON序列化和反序列化的优化方法,其特征在于,包括:
创建用于对JSON序列化和反序列化优化的JSON对象抽象基类,在所述JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象;
当对JSON执行反序列化操作时,通过包括QJSON,JsonCpp,RapidJSON,Parson在内的JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,进而通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,并对每个属性进行赋值;
当对JSON执行序列化操作时,调用所述业务逻辑类,获取属性成员的具体值,形成key-value格式的所述JSON对象键值对,进而将所述JSON对象键值对,通过所述JSON解析库执行序列化操作,生成序列化后的JSON数据。
2.根据权利要求1所述的JSON序列化和反序列化的优化方法,其特征在于,在所述JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象,具体包括:
创建各类型属性的宏定义对象包括整型、浮点型、双精度型、布尔型、字符串型、字节型、数组、嵌套Json对象在内的全部常用的数据类型的定义方案,在所述业务逻辑类中直接使用宏定义对象创建对应的JSON数据结构中已有的属性类型;
对各个属性实现解析功能的宏定义对象包括初始化各个属性的公共函数的首与尾,以及为属性进行具体赋值的宏定义。
3.根据权利要求1所述的JSON序列化和反序列化的优化方法,其特征在于,在对JSON执行反序列化操作时,通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,具体为:
将所述JSON对象抽象基类作为公共类,当创建具体的所述JSON数据的所述业务逻辑类时,继承所述JSON对象抽象基类;
所述业务逻辑类继承所述JSON对象抽象基类后,直接调用所述JSON对象抽象基类中包含的所有宏定义。
4.根据权利要求3所述的JSON序列化和反序列化的优化方法,其特征在于,还包括:
在所述JSON对象抽象基类中包含了用于初始化属性值的属性初始化虚函数,进而在所述业务逻辑类中对所述属性初始化虚函数的逻辑进行重写,使得在每个所述业务逻辑类中为具体的JSON数据的各个属性进行赋值。
5.根据权利要求4所述的JSON序列化和反序列化的优化方法,其特征在于,还包括:
在所述业务逻辑类中,所述属性初始化虚函数的重新定义,通过包括定义执行初始化属性值函数开始段和定义执行初始化属性值函数结束段的两个宏定义进行执行体段落的限定;
包括在所述定义执行初始化属性值函数开始段,以及在所述定义执行初始化属性值函数结束段之间的片段为所述属性初始化虚函数的定义主体。
6.根据权利要求2所述的JSON序列化和反序列化的优化方法,其特征在于,还包括:
通过定义的嵌套Json对象的宏定义对象,实现JSON对象的多重嵌套;
在创建所述业务逻辑类的包含多重嵌套的JSON对象的属性成员时,将属性成员的值通过其他的所述业务逻辑类定义的反序列化后的JSON数据进行赋值。
7.根据权利要求1所述的JSON序列化和反序列化的优化方法,其特征在于,还包括:
定义统一转化接口,实现在反序列化操作时,调用所述JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,以及在序列化操作时,调用所述JSON解析库执行序列化操作,生成序列化后的JSON数据。
8.一种执行如权利要求1-7所述的JSON序列化和反序列化的优化方法的***,其特征在于,包括:
抽象基础类创建模块,用于创建用于对JSON序列化和反序列化优化的JSON对象抽象基类,在所述JSON对象抽象基础类中定义包括创建各类型属性,以及对各个属性实现解析功能的宏定义对象;
反序列化模块,用于当对JSON执行反序列化操作时,通过包括QJSON,JsonCpp,RapidJSON,Parson在内的JSON解析库对JSON数据进行解析,生成key-value格式的JSON对象键值对,进而通过调用所述JSON对象抽象基类创建包含所述JSON数据的所有属性成员的业务逻辑类,并对每个属性进行赋值;
序列化模块,用于当对JSON执行序列化操作时,调用所述业务逻辑类,获取属性成员的具体值,形成key-value格式的所述JSON对象键值对,进而将所述JSON对象键值对,通过所述JSON解析库执行序列化操作,生成序列化后的JSON数据。
9.一种计算机设备,包括存储器和一个或多个处理器,所述存储器中存储有计算机代码,所述计算机代码被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如权利要求1至7中任一项所述的方法被执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110419119.2A CN113138755A (zh) | 2021-04-19 | 2021-04-19 | 一种json序列化和反序列化的优化方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110419119.2A CN113138755A (zh) | 2021-04-19 | 2021-04-19 | 一种json序列化和反序列化的优化方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113138755A true CN113138755A (zh) | 2021-07-20 |
Family
ID=76812723
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110419119.2A Pending CN113138755A (zh) | 2021-04-19 | 2021-04-19 | 一种json序列化和反序列化的优化方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113138755A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114117992A (zh) * | 2021-11-25 | 2022-03-01 | 北京力控元通科技有限公司 | 一种序列化和反序列化方法、装置和电子设备 |
CN115237415A (zh) * | 2022-09-22 | 2022-10-25 | 南京雷电信息技术有限公司 | 一种gis平台下态势复盘的实现方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016029788A1 (zh) * | 2014-08-29 | 2016-03-03 | 优视科技有限公司 | 序列化方法和装置、以及反序列化方法和装置 |
CN105573956A (zh) * | 2015-12-10 | 2016-05-11 | 盛趣信息技术(上海)有限公司 | 序列化方法以及基于序列化的网络通信方法 |
CN112286594A (zh) * | 2020-10-10 | 2021-01-29 | 百度(中国)有限公司 | 对象序列化和反序列化方法及设备、电子设备和介质 |
-
2021
- 2021-04-19 CN CN202110419119.2A patent/CN113138755A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016029788A1 (zh) * | 2014-08-29 | 2016-03-03 | 优视科技有限公司 | 序列化方法和装置、以及反序列化方法和装置 |
CN105573956A (zh) * | 2015-12-10 | 2016-05-11 | 盛趣信息技术(上海)有限公司 | 序列化方法以及基于序列化的网络通信方法 |
CN112286594A (zh) * | 2020-10-10 | 2021-01-29 | 百度(中国)有限公司 | 对象序列化和反序列化方法及设备、电子设备和介质 |
Non-Patent Citations (2)
Title |
---|
大蓝头: "C++对象的JSON序列化与反序列化探索完结-列表的序列化与反序列化", pages 1 - 14, Retrieved from the Internet <URL:https://blog.csdn.net/tragicguy/article/details/9174015> * |
徐步小兵: "【C/C++业务】cJSON总结与使用", pages 1 - 13, Retrieved from the Internet <URL:https://blog.csdn.net/weixin_43166958/article/details/114287183> * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114117992A (zh) * | 2021-11-25 | 2022-03-01 | 北京力控元通科技有限公司 | 一种序列化和反序列化方法、装置和电子设备 |
CN115237415A (zh) * | 2022-09-22 | 2022-10-25 | 南京雷电信息技术有限公司 | 一种gis平台下态势复盘的实现方法 |
CN115237415B (zh) * | 2022-09-22 | 2022-12-16 | 南京雷电信息技术有限公司 | 一种gis平台下态势复盘的实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5850550A (en) | No preprocessor and a source level debugger for embedded SQL in a 3GL | |
CN106462425B (zh) | 使用复常量的方法和*** | |
US7610545B2 (en) | Annotations for tracking provenance | |
US9043759B1 (en) | System and method for generating software unit tests simultaneously with API documentation | |
CN107861728B (zh) | 用于传统程序语言向现代程序语言转换的方法及其*** | |
JP5851396B2 (ja) | 処理方法 | |
US9280442B1 (en) | System and method for generating coverage reports for software unit tests | |
US10140119B2 (en) | Modular serialization | |
US8752020B2 (en) | System and process for debugging object-oriented programming code leveraging runtime metadata | |
US10853096B2 (en) | Container-based language runtime loading an isolated method | |
US20120151437A1 (en) | Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language | |
Grimmer et al. | Cross-language interoperability in a multi-language runtime | |
US20080270979A1 (en) | Methods and systems for using type models to generate an implementation of a type | |
US7512938B2 (en) | Typed intermediate representation for object-oriented languages | |
US9910591B2 (en) | Visualizations of memory layouts in software programs | |
KR101770292B1 (ko) | 컴퓨터 수행 가능한 모델 역공학 방법 및 장치 | |
CN113138755A (zh) | 一种json序列化和反序列化的优化方法及*** | |
Córdoba-Sánchez et al. | Ann: A domain-specific language for the effective design and validation of Java annotations | |
US10983771B1 (en) | Quality checking inferred types in a set of code | |
RU2347269C2 (ru) | Система и способ декларативного определения и использования подклассов внутри разметки | |
WO2022172025A1 (en) | Optimising computer program code | |
US10275154B2 (en) | Building memory layouts in software programs | |
US9552192B2 (en) | Context-based generation of memory layouts in software programs | |
CN111475150A (zh) | 一种跨语言绑定方法、装置、设备及存储介质 | |
US12038940B2 (en) | Architecture for data map converters |
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 |