CN112130860A - Json对象解析方法、装置、电子设备及存储介质 - Google Patents
Json对象解析方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112130860A CN112130860A CN202011012560.0A CN202011012560A CN112130860A CN 112130860 A CN112130860 A CN 112130860A CN 202011012560 A CN202011012560 A CN 202011012560A CN 112130860 A CN112130860 A CN 112130860A
- Authority
- CN
- China
- Prior art keywords
- currently selected
- key
- sub
- selected key
- class
- 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.)
- Granted
Links
Images
Classifications
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (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对象是由当前最新的字典自动创建生成的,所以新添加到字典中的字段会被自动同步创建,能说实现新字段的自动同步。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及JSON对象解析方法、装置、电子设备及存储介质。
背景技术
不同开发群体之间软件的协议及脚本可能不同,导致不同软件之间无法直接进行数据交互,需要先将数据转化为通用格式,然后在进行数据交互。JSON(Java ScriptObject Notation,JS对象简谱)是一种轻量级的数据交换格式,广泛应用于不同软件间的数据交互。JSON数据的转换一般依赖于NSDictionary(字典),字典是由键值对:Key(关键字)和Value(值)组成的数据集合,每个Key可得到唯一的Value。
相关技术中,需要预先人工编写好JSON对象的框架(包括JSON对象的各属性项及子对象等),并且需要建立JSON对象中各属性项与字典中属性的对应关系。当根据字典中的数据解析JSON对象时,从多个预先编写好的包括各属性的JSON对象中选取相应的JSON对象,该JSON对象的属性的名称要与字典的Key同名,解析时需要将相应的JSON对象信息传进去,实例化相应的JSON对象,针对JSON对象的各属性,以属性名称作为Key去NSDictionary中获取相应的值,然后付给JSON对象中对应的属性,从而利用NSDictionary完成JSON对象的解析。
发明人在研究中发现,采用上述方法,预先人工编写好JSON对象的框架,人工工作量大,同时当JSON对象的框架发生变动时,例如增加某属性项或者变更某属性项时,需要对JSON对象的框架进行修改及维护,造成人工维护成本高。并且随着JSON对象的增加,JSON对象的框架也需要相应增加,造成代码尺寸及人工维护成本较高。
发明内容
本申请实施例的目的在于提供一种JSON对象解析方法、装置、电子设备及存储介质,以降低代码尺寸及人工维护成本。具体技术方案如下:
第一方面,本申请实施例提供了一种JSON对象解析方法,所述方法包括:
获取待解析的JSON对象的类,得到目标类;
若已创建的类中不存在所述目标类,创建所述目标类;
基于创建的所述目标类,建立所述JSON对象;
获取所述JSON对象对应的字典中的各关键字Key;
按照预设的遍历顺序,获取当前待处理的Key的值Value;
在当前选取的Key对应的Value为字符串时,将当前选取的Key的Value作为属性值;
判断所述JSON对象中是否存在当前选取的Key对应的属性;
若所述JSON对象中不存在当前选取的Key对应的属性,在所述JSON对象中创建对应的属性;
将当前选取的Key的Value赋予当前选取的Key对应的属性;
返回执行上述步骤:按照预设的遍历顺序,获取当前待处理的Key的值Value,直至所述JSON对象对应的字典中的各Key均处理完成。
在一种可能的实施方式中,在所述按照预设的遍历顺序,获取当前待处理的Key的值Value之后,所述方法还包括:
在当前选取的Key对应的Value为字典时,根据当前选取的Key对应的字典,在所述JSON对象中创建当前选取的Key对应的子对象。
在一种可能的实施方式中,所述根据当前选取的Key对应的字典,在所述JSON对象中创建当前选取的Key对应的子对象,包括:
在当前选取的Key对应的字典中,获取表示子对象类名的Key;
若表示子对象类名的Key的Value为子对象类名,在所述JSON对象中建立所述子对象类名表示的类,并基于所述子对象类名表示的类创建当前选取的Key对应的子对象;
若表示子对象类名的Key的Value为子对象类名函数,在所述JSON对象中建立当前选取的Key对应的子对象类名函数,并基于所述子对象类名函数表示的类创建当前选取的Key对应的子对象,其中,所述子对象类名函数用于调用从其他应用中获取的当前选取的Key对应的子对象类名。
在一种可能的实施方式中,在所述按照预设的遍历顺序,获取当前待处理的Key的值Value之后,所述方法还包括:
在当前选取的Key对应的Value为数组时,获取当前选取的Key对应的数组的各元素;
针对为字典的元素,根该字典创建当前选取的Key对应的子对象;
针对为字符串的元素,将该字符串作为属性值赋予当前选取的Key对应的属性。
在一种可能的实施方式中,在所述判断所述JSON对象中是否存在当前选取的Key对应的属性之前,所述方法还包括:
判断当前选取的Key对应的属性是否为预设保留关键字;
若当前选取的Key对应的属性为所述预设保留关键字,对当前选取的Key对应的属性重命名。
第二方面,本申请实施例提供了一种JSON对象解析装置,所述装置包括:
目标类获取模块,用于获取待解析的JSON对象的类,得到目标类;
目标类建立模块,用于若已创建的类中不存在所述目标类,创建所述目标类;
JSON对象建立模块,用于基于创建的所述目标类,建立所述JSON对象;
Key获取模块,用于获取所述JSON对象对应的字典中的各关键字Key;
Key选取模块,用于按照预设的遍历顺序,获取当前待处理的Key的值Value;
属性值获取模块,用于在当前选取的Key对应的Value为字符串时,将当前选取的Key的Value作为属性值;
第一判断模块,用于判断所述JSON对象中是否存在当前选取的Key对应的属性;
属性创建模块,用于若所述JSON对象中不存在当前选取的Key对应的属性,在所述JSON对象中创建对应的属性;
第一属性赋值模块,用于将当前选取的Key对应的Value赋予当前选取的Key对应的属性;
第二判断模块,用于返回上述Key选取模块继续执行,直至所述JSON对象对应的字典中的各Key均处理完成。
在一种可能的实施方式中,所述装置还包括:
第一子对象建立模块,用于在当前选取的Key对应的Value为字典时,根据当前选取的Key对应的字典,在所述JSON对象中创建当前选取的Key对应的子对象。
在一种可能的实施方式中,所述子对象建立模块,具体用于:在当前选取的Key对应的Value为字典时,在当前选取的Key对应的字典中,获取表示子对象类名的Key;若表示子对象类名的Key的Value为子对象类名,在所述JSON对象中建立所述子对象类名表示的类,并在所述子对象类名表示的类下创建当前选取的Key对应的子对象;若表示子对象类名的Key的Value为子对象类名函数,在所述JSON对象中建立当前选取的Key对应的子对象类名函数,并基于所述子对象类名函数表示的类创建当前选取的Key对应的子对象,其中,所述子对象类名函数用于调用从其他应用中获取的当前选取的Key对应的子对象类名。
在一种可能的实施方式中,所述装置还包括:
元素获取模块,用于在当前选取的Key对应的Value为数组时,获取当前选取的Key对应的数组的各元素;
第二子对象建立模块,用于针对为字典的元素,根该字典创建当前选取的Key对应的子对象;
第二属性赋值模块,用于针对为字符串的元素,将该字符串作为属性值赋予当前选取的Key对应的属性。
在一种可能的实施方式中,所述装置还包括:
第三判断模块,用于判断当前选取的Key对应的属性是否为预设保留关键字;
重命名模块,用于若当前选取的Key对应的属性为所述预设保留关键字,对当前选取的Key对应的属性重命名。
第三方面,本申请实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述任一JSON对象解析方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一JSON对象解析方法。
本申请实施例提供的JSON对象解析方法、装置、电子设备及存储介质,获取待解析的JSON对象的类,得到目标类;若已创建的类中不存在目标类,创建目标类;基于创建的目标类,建立JSON对象;获取JSON对象对应的字典中的各关键字Key;按照预设的遍历顺序,获取当前待处理的Key的值Value;在当前选取的Key对应的Value为字符串时,将当前选取的Key的Value作为属性值;判断JSON对象中是否存在当前选取的Key对应的属性;若JSON对象中不存在当前选取的Key对应的属性,在JSON对象中创建对应的属性;将当前选取的Key对应的Value赋予当前选取的Key对应的属性;返回执行上述步骤:按照预设的遍历顺序,获取当前待处理的Key的值Value,直至JSON对象对应的字典中的各Key均处理完成。解析过程中的JSON对象是自动生成的,无须人工预先编写、创建,并且JSON对象的属性可以在解析过程中动态添加,无需人工预先编写包括所有属性的JSON对象的框架,因此无需对JSON对象框架进行维护,能够降低人工维护成本,且因为不涉及预先编写所有JSON对象的框架,降低了代码尺寸。当然,实施本申请的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本申请实施例的JSON对象解析方法的第一种流程示意图;
图2为本申请实施例的JSON对象解析方法的第二种流程示意图;
图3为本申请实施例的JSON对象解析方法中创建子对象的一种流程示意图;
图4为本申请实施例的JSON对象解析方法的第三种流程示意图;
图5为本申请实施例的JSON对象解析方法的第四种流程示意图;
图6为本申请实施例的JSON对象解析装置的一种结构示意图;
图7为本申请实施例的电子设备的一种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
为了降低代码尺寸及人工维护成本,本申请实施例提供了一种JSON对象解析方法,该方法包括:
获取待解析的JSON对象的类,得到目标类;
若已创建的类中不存在上述目标类,创建上述目标类;
基于创建的上述目标类,建立上述JSON对象;
获取上述JSON对象对应的字典中的各关键字Key;
按照预设的遍历顺序,获取当前待处理的Key的值Value;
在当前选取的Key对应的Value为字符串时,将当前选取的Key的Value作为属性值;
判断上述JSON对象中是否存在当前选取的Key对应的属性;
若上述JSON对象中不存在当前选取的Key对应的属性,在上述JSON对象中创建对应的属性;
将当前选取的Key对应的Value赋予当前选取的Key对应的属性;
返回执行上述步骤:按照预设的遍历顺序,获取当前待处理的Key的值Value,直至上述JSON对象对应的字典中的各Key均处理完成。
在本申请实施例中,解析过程中的JSON对象是自动生成的,无须人工预先编写、创建,并且JSON对象的属性可以在解析过程中动态添加,无需人工预先编写包括所有属性的JSON对象的框架,因此无需对JSON对象框架进行维护,能够降低人工维护成本,且因为不涉及预先编写所有JSON对象的框架,降低了代码尺寸。
下面进行具体说明,参见图1,图1为本申请实施例的一种JSON对象解析方法的流程示意图,包括:
S101,获取待解析的JSON对象的类,得到目标类。
本申请实施例的JSON对象解析方法可以通过电子设备实现,具体的,该电子设备可以为智能手机、个人电脑或服务器等。
本申请实施例中不需要提前编写JSON对象的框架,只需为每个JSON对象约定一个标识,例如名称或ID等。在需要解析JSON对象时,获取待解析的JSON对象的标识,通过JSON对象的标识可以获取JSON对象的类,将待解析的JSON对象的类,称为目标类。
S102,若已建立的类中不存在上述目标类,建立上述目标类。
例如,可以通过runtime(运行时刻)相关API(Application ProgrammingInterface,应用程序接口)创建目标类,并注册该目标类,从而完成JSON对象的类的自动创建。
S103,基于创建的上述目标类,建立上述JSON对象。
可选的,判断已建立的类中是否存在上述目标类,若已建立的类中存在上述目标类,在该目标类中建立上述JSON对象;若已建立的类中不存在上述目标类,可以建立上述目标类,再在上述目标类中建立上述JSON对象。例如,可以通过runtime相关的API查询类名来判断目标类是否存在;如果目标类不存在,利用runtime相关的API可以创建和注册目标类,并利用这些相关的API通过目标类来完成JSON对象的创建。
S104,获取上述JSON对象对应的字典中的各Key(关键字)。
字典中存储了未解析的Key及各Key的Value(值),字典中的Key可以为JSON对象的属性的名称。获取上述JSON对象对应的字典,并对字典进行解析,得到JSON对象所有Key。
S105,按照预设的遍历顺序,获取当前待处理的Key的Value。
预设的遍历顺序可以根据实际情况自定义设置,本申请中不做限定。按照预设的遍历顺序依次选取Key作为当前待处理的Key,其中,在当前选取的Key处理完成后,按照预设的遍历顺序获取下一个Key,作为当前待处理的Key。获取当前待处理的Key的Value。
S106,在当前选取的Key对应的Value为字符串时,将当前选取的Key的Value作为属性值。
字典是由键值对:Key(关键字)和Value(值)组成的数据集合,每个Key可得到唯一的Value。在当前选取的Key的Value为字符串时,获取该字符串作为该Key对应的属性的属性值,即当前选取的Key对应的属性值。此处的字符串是指单一对象的字符串,多个对象的字符串称为数组。
S107,判断上述JSON对象中是否存在当前选取的Key对应的属性。
查询JSON对象中是否已经存在(已经建立了)当前选取的Key对应的属性。一般情况下,Key为JSON对象中属性的名称,因此可以直接根据当前选取的Key,查询JSON对象中已经存在的属性的名称,从而确定JSON对象中是否存在当前选取的Key对应的属性。
S108,若上述JSON对象中不存在当前选取的Key对应的属性,在上述JSON对象中创建对应的属性。
例如,可以通过runtime相关的API在JSON对象中动态添加当前选取的Key对应的属性,并将当前选取的Key对应的属性值赋予该当前创建的属性。
S109,将当前选取的Key的Value赋予当前选取的Key对应的属性。
在当前选取的Key的Value为字符串时,将当前选取的Key的Value赋值到当前选取的Key对应的属性下。例如,当前选取的Key为年龄,当前选取的Key的Value为18,则将18赋值到年龄下。
可选的,可以通过runtime相关的API查询JSON对象中是否存在当前选取的Key对应的属性,并通过runtime相关的API给JSON对象中指定的属性赋值。
S110,返回执行上述步骤S105按照预设的遍历顺序,获取当前待处理的Key的值Value,直至上述JSON对象对应的字典中的各Key均处理完成。
在本申请实施例中,解析过程中的JSON对象是自动生成的,无须人工预先编写、创建,并且JSON对象的属性可以在解析过程中动态添加,无需人工预先编写包括所有属性的JSON对象的框架,因此无需对JSON对象框架进行维护,当新增加属性或属性名称改变时,runtime相关API动态创建JSON对象(解决了新增和名称改变维护问题),属性删除和名称改变的老属性,在启动重新创建对象时不会创建,借以完成了老数据的删除,能够降低人工维护成本,且因为不涉及预先编写所有JSON对象的框架,降低了代码尺寸。JSON对象是由当前最新的字典自动创建生成的,所以新添加到字典中的字段会被自动同步创建,能说实现新字段的自动同步。
JSON对象中可能会存在嵌套子对象的情况,在通过类名来创建JSON对象时,还需要解决子对象的创建问题。在一种可能的实施方式中,在上述JSON对象对应的字典中选取一个未选取过的Key之后,参见图2,上述方法还包括:
S111,在当前选取的Key对应的Value为字典时,根据当前选取的Key对应的字典,在上述JSON对象中创建当前选取的Key对应的子对象。
每个子对象对应一个字典,Key对应的字典中同样记录了Key及Value,Key对应的字典表示一个子对象,子对象的类名可以记录在其对应的字典中。当解析过程中遇当前选取的Key的Value是字典时,解析当前选取的Key的字典,找到表示子对象类名的Key及其Value,从而得到子对象的类名。
在JSON对象下建立当前选取的Key的子对象。可选的,通过字典中表示子对象类名的Key的Value,获取对应的子对象类名,判断JSON对象中是否已经建立了该子对象的类,若已建立了该子对象的类,在该子对象的类下创建该子对象;若未建立该子对象的类,创建相应的子对象类并创建相应的子对象。同样的,JSON对象的子对象的类及子对象可以利用runtime相关的API进行创建。具体的,子对象中也可包括属性及子对象,其具体建立过程可以参见JSON对象的建立过程,此处不再赘述。
在本申请实施例中,实现了对JSON对象嵌套的子对象的自动创建,能够满足多种需求,通过字典来标识子对象,能够加到的缩减代码尺寸。
表示子对象类名的Key,其对应的Value可以有两种形式,一种形式下Value即为子对象类名,另一种形式下Value为子对象类名函数。
value为子对象类名,该情况是最普遍情况,解析时可以直接通过子对象Key找到对应的子对象类名。在一种可能的实施方式中,上述根据当前选取的Key对应的字典,在上述JSON对象中创建当前选取的Key对应的子对象,包括:
步骤一,在当前选取的Key对应的字典中,获取表示子对象类名的Key。
步骤二,若表示子对象类名的Key的Value为子对象类名,在上述JSON对象中建立上述子对象类名表示的类,并基于上述子对象类名表示的类创建当前选取的Key对应的子对象。
在Value为子对象类名的情况下,解析时可以直接通过表示子对象类名的Key找到对应的子对象类名。
步骤三,若表示子对象类名的Key的Value为子对象类名函数,在上述JSON对象中建立当前选取的Key对应的子对象类名函数,并基于上述子对象类名函数表示的类创建当前选取的Key对应的子对象,其中,上述子对象类名函数用于调用从其他应用中获取的当前选取的Key对应的子对象类名。
子对象类名函数用于调用从其他应用中获取相应的子对象的类名,当子对象的类名需要从服务端等其他应用中获取时,可以通过对象类名函数实现子对象的创建。通过函数方式将相应的字典作为参数导入,由子对象类名函数返回子对象的类名,能够满足多种实际需求。在Value为子对象类名函数的情况下,子对象的类型不能直接确定,需要调用子对象类名函数的才能确定。例如,子对象对应的是附件对象,附件对象分为很多类型,图片、视频、音频等,该情况需要根据字典中的某key值如attachmentType的值,才能确定附件类型,因此需要在子对象类名函数中,根据子对象解析前字典中的某个值如attachmentType判断类型,返回对应的子对象类名。
在一些可能的场景中,Key对应的内容可能会用数组的形式进行表示。在一种可能的实施方式中,参见图3,在上述按照预设的遍历顺序,获取当前待处理的Key的值Value之后,上述方法还包括:
S112,在当前选取的Key对应的Value为数组时,获取当前选取的Key对应的数组的各元素。
S113,针对为字典的元素,根该字典创建当前选取的Key对应的子对象。
S114,针对为字符串的元素,将该字符串作为属性值赋予当前选取的Key对应的属性。
数组是有序的元素序列,一个数组中可以包括多个元素,针对数组中的任意一个元素,若该元素为字典,则将调用预设解析字典的函数解析该元素(字典),根该字典在JSON对象中创建当前选取的Key对应的子对象;若该元素为字符串,则将该字符串作为属性值赋予当前选取的Key对应的属性。当数组中存在多个元素时,针对每个元素均执行上述操作。
在本申请实施例中,根据Key对应内容的不同,实现了针对单一对象(字符串)、数组和字典等情况的相应处理或相应递归处理,能够满足多种需求。解析过程中的JSON对象是自动生成的,无须人工预先编写、创建,进一步提升了效率,进一步减少了由于人工维护引入的相关Bug(漏洞),进一步增强了代码的稳定性,提升了迭代效率,减少了JSON对象的框架相关代码,极大的减小了代码尺寸,实现自动新加或更新属性/子对象,降低了维护成本。
在一些可能的场景中,JSON对象中需要对关键字进行保留,新增的属性不能与保留的关键字重名。在一种可能的实施方式中,参见图4,在上述判断上述JSON对象中是否存在当前选取的Key对应的属性之前,上述方法还包括:
S115,判断当前选取的Key对应的属性是否为预设保留关键字。
S116,若当前选取的Key对应的属性为上述预设保留关键字,对当前选取的Key对应的属性重命名。
预设保留关键字可以存储在Set数据结构中,采用Set数据结构是因为在JSON对象解析场景中该结构的数据读取效率高。当Key对应的属性为预设保留关键字时,对该属性进行重新命名,重命名规则可以根据实际情况自定义设置,可选的,可以在相应的属性的名称前添加“custom”等,例如,“ID”被重命名为“custom ID”。
在本申请实施例中,对与预设保留关键字相同的属性进行重命名,能够防止属性与预设保留关键字同名。
下面以客户端从服务端获取数据为例进行详细说明,客户端通过HTTP协议(超文本传输协议)从服务端获取数据,服务端将数据转化为JSON格式的字符串。客户端接收JSON格式的字符串,并将JSON格式的字符串转化为字典。具体的JSON格式字符串转化为字典的方式可以参见相关技术中的转换方式,本申请中不做具体限定。在得到字典后,需要将字典转化为相应的JSON对象,即对JSON对象进行解析,其具体过程参见图5,包括:
S201,获取待解析的JSON对象的类。
S202,判断JSON对象的类是否存在;若存在执行S204,若不存在执行S203。
S203,创建并注册JSON对象的类。
S204,基于JSON对象的类,创建该JSON对象。
S205,获取JSON对象的字典中的各Key。
S206,按照预设的遍历顺序,获取当前待处理的Key(以下称为当前Key)的Value。
S207,判断当前Key的Value是否为字典;若为字典则执行S208,若不为字典则执行S209。
S208,根据当前Key的字典,在JSON对象中建立子对象。
S209,判断当前Key的Value是否为数组;若为数组则执行S210,若不为数组则将当前Key对应的Value(此时为单一对象的字符串)作为属性值。
S210,获取数组中的所有元素。
S211,针对任一元素,判断该元素是否为字典;若是则执行步骤S212,若否则获取元素值作为当前Key对应的属性值。
S212,根据当前Key数组中该元素的字典,在JSON对象中建立子对象。
S213,判断当前Key对应的属性的名称是否为保留关键字,若是则执行S214,若否则执行S215。
S214,按照预设规则对当前Key对应的属性的名称进行重命名。
S215,判断JSON对象中是否存在当前Key对应的属性;若否则执行S216,若是则执行S217。
S216,创建相应属性。
S217,将属性值赋予相应属性。
S218,返回执行上述步骤S206,直至JSON对象的字典中的各Key均处理完成。
在本申请实施例中,根据Key对应内容的不同,实现了针对单一对象、数组和字典等情况的相应处理或相应递归处理,能够满足多种需求。解析过程中的JSON对象是自动生成的,无须人工预先编写、创建,进一步提升了效率,进一步减少了由于人工维护引入的相关Bug(漏洞),进一步增强了代码的稳定性,提升了迭代效率,减少了JSON对象的框架相关代码,极大的减小了代码尺寸,实现自动新加或更新属性,降低了维护成本。
本申请实施例还提供了一种JSON对象解析装置,参见图6,该装置包括:
目标类获取模块601,用于获取待解析的JSON对象的类,得到目标类;
目标类建立模块602,用于若已创建的类中不存在上述目标类,创建上述目标类;
JSON对象建立模块603,用于基于创建的上述目标类,建立上述JSON对象;
Key获取模块604,用于获取上述JSON对象对应的字典中的各关键字Key;
Key选取模块605,用于按照预设的遍历顺序,获取当前待处理的Key的值Value;
属性值获取模块606,用于在当前选取的Key对应的Value为字符串时,将当前选取的Key的Value作为属性值;
第一判断模块607,用于判断上述JSON对象中是否存在当前选取的Key对应的属性;
属性创建模块608,用于若上述JSON对象中不存在当前选取的Key对应的属性,在上述JSON对象中创建对应的属性;
第一属性赋值模块609,用于将当前选取的Key的Value赋予当前选取的Key对应的属性;
第二判断模块610,用于返回上述Key选取模块继续执行,直至上述JSON对象对应的字典中的各Key均处理完成。
在一种可能的实施方式中,上述装置还包括:
第一子对象建立模块,用于在当前选取的Key对应的Value为字典时,根据当前选取的Key对应的字典,在上述JSON对象中创建当前选取的Key对应的子对象。
在一种可能的实施方式中,上述子对象建立模块,具体用于:在当前选取的Key对应的Value为字典时,在当前选取的Key对应的字典中,获取表示子对象类名的Key;若表示子对象类名的Key的Value为子对象类名,在所述JSON对象中建立所述子对象类名表示的类,并基于所述子对象类名表示的类创建当前选取的Key对应的子对象;若表示子对象类名的Key的Value为子对象类名函数,根据当前选取的Key对应的字典,在上述JSON对象中建立当前选取的Key对应的子对象类名函数,并基于上述子对象类名函数表示的类创建当前选取的Key对应的子对象,其中,上述子对象类名函数用于调用从其他应用中获取的当前选取的Key对应的子对象类名。
在一种可能的实施方式中,上述装置还包括:
元素获取模块,用于在当前选取的Key对应的Value为数组时,获取当前选取的Key对应的数组的各元素;
第二子对象建立模块,用于针对为字典的元素,根该字典创建当前选取的Key对应的子对象;
第二属性赋值模块,用于针对为字符串的元素,将该字符串作为属性值赋予当前选取的Key对应的属性。
在一种可能的实施方式中,上述装置还包括:
第三判断模块,用于判断当前选取的Key对应的属性是否为预设保留关键字;
重命名模块,用于若当前选取的Key对应的属性为上述预设保留关键字,对当前选取的Key对应的属性重命名。
本申请实施例还提供了一种电子设备,如图7所示,包括处理器701、通信接口702、存储器703和通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信,
存储器703,用于存放计算机程序;
处理器701,用于执行存储器703上所存放的程序时,实现上述实施例中任一所述的JSON对象解析方法。
上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述终端与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本申请提供的又一实施例中,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中任一所述的JSON对象解析方法。
在本申请提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的JSON对象解析方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备及存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。
Claims (12)
1.一种JSON对象解析方法,其特征在于,所述方法包括:
获取待解析的JSON对象的类,得到目标类;
若已创建的类中不存在所述目标类,创建所述目标类;
基于创建的所述目标类,建立所述JSON对象;
获取所述JSON对象对应的字典中的各关键字Key;
按照预设的遍历顺序,获取当前待处理的Key的值Value;
在当前选取的Key对应的Value为字符串时,将当前选取的Key的Value作为属性值;
判断所述JSON对象中是否存在当前选取的Key对应的属性;
若所述JSON对象中不存在当前选取的Key对应的属性,在所述JSON对象中创建对应的属性;
将当前选取的Key的Value赋予当前选取的Key对应的属性;
返回执行上述步骤:按照预设的遍历顺序,获取当前待处理的Key的值Value,直至所述JSON对象对应的字典中的各Key均处理完成。
2.根据权利要求1所述的方法,其特征在于,在所述按照预设的遍历顺序,获取当前待处理的Key的值Value之后,所述方法还包括:
在当前选取的Key对应的Value为字典时,根据当前选取的Key对应的字典,在所述JSON对象中创建当前选取的Key对应的子对象。
3.根据权利要求2所述的方法,其特征在于,所述根据当前选取的Key对应的字典,在所述JSON对象中创建当前选取的Key对应的子对象,包括:
在当前选取的Key对应的字典中,获取表示子对象类名的Key;
若表示子对象类名的Key的Value为子对象类名,在所述JSON对象中建立所述子对象类名表示的类,并基于所述子对象类名表示的类创建当前选取的Key对应的子对象;
若表示子对象类名的Key的Value为子对象类名函数,在所述JSON对象中建立当前选取的Key对应的子对象类名函数,并基于所述子对象类名函数表示的类创建当前选取的Key对应的子对象,其中,所述子对象类名函数用于调用从其他应用中获取的当前选取的Key对应的子对象类名。
4.根据权利要求1所述的方法,其特征在于,在所述按照预设的遍历顺序,获取当前待处理的Key的值Value之后,所述方法还包括:
在当前选取的Key对应的Value为数组时,获取当前选取的Key对应的数组的各元素;
针对为字典的元素,根该字典创建当前选取的Key对应的子对象;
针对为字符串的元素,将该字符串作为属性值赋予当前选取的Key对应的属性。
5.根据权利要求1所述的方法,其特征在于,在所述判断所述JSON对象中是否存在当前选取的Key对应的属性之前,所述方法还包括:
判断当前选取的Key对应的属性是否为预设保留关键字;
若当前选取的Key对应的属性为所述预设保留关键字,对当前选取的Key对应的属性重命名。
6.一种JSON对象解析装置,其特征在于,所述装置包括:
目标类获取模块,用于获取待解析的JSON对象的类,得到目标类;
目标类建立模块,用于若已创建的类中不存在所述目标类,创建所述目标类;
JSON对象建立模块,用于基于创建的所述目标类,建立所述JSON对象;
Key获取模块,用于获取所述JSON对象对应的字典中的各关键字Key;
Key选取模块,用于按照预设的遍历顺序,获取当前待处理的Key的值Value;
属性值获取模块,用于在当前选取的Key对应的Value为字符串时,将当前选取的Key的Value作为属性值;
第一判断模块,用于判断所述JSON对象中是否存在当前选取的Key对应的属性;
属性创建模块,用于若所述JSON对象中不存在当前选取的Key对应的属性,在所述JSON对象中创建对应的属性;
第一属性赋值模块,用于将当前选取的Key对应的Value赋予当前选取的Key对应的属性;
第二判断模块,用于返回上述Key选取模块继续执行,直至所述JSON对象对应的字典中的各Key均处理完成。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第一子对象建立模块,用于在当前选取的Key对应的Value为字典时,根据当前选取的Key对应的字典,在所述JSON对象中创建当前选取的Key对应的子对象。
8.根据权利要求7所述的装置,其特征在于,所述子对象建立模块,具体用于:在当前选取的Key对应的Value为字典时,在当前选取的Key对应的字典中,获取表示子对象类名的Key;若表示子对象类名的Key的Value为子对象类名,在所述JSON对象中建立所述子对象类名表示的类,并在所述子对象类名表示的类下创建当前选取的Key对应的子对象;若表示子对象类名的Key的Value为子对象类名函数,在所述JSON对象中建立当前选取的Key对应的子对象类名函数,并基于所述子对象类名函数表示的类创建当前选取的Key对应的子对象,其中,所述子对象类名函数用于调用从其他应用中获取的当前选取的Key对应的子对象类名。
9.根据权利要求6所述的装置,其特征在于,所述装置还包括:
元素获取模块,用于在当前选取的Key对应的Value为数组时,获取当前选取的Key对应的数组的各元素;
第二子对象建立模块,用于针对为字典的元素,根该字典创建当前选取的Key对应的子对象;
第二属性赋值模块,用于针对为字符串的元素,将该字符串作为属性值赋予当前选取的Key对应的属性。
10.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第三判断模块,用于判断当前选取的Key对应的属性是否为预设保留关键字;
重命名模块,用于若当前选取的Key对应的属性为所述预设保留关键字,对当前选取的Key对应的属性重命名。
11.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-5任一所述的方法步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-5任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011012560.0A CN112130860B (zh) | 2020-09-23 | 2020-09-23 | Json对象解析方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011012560.0A CN112130860B (zh) | 2020-09-23 | 2020-09-23 | Json对象解析方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112130860A true CN112130860A (zh) | 2020-12-25 |
CN112130860B CN112130860B (zh) | 2023-09-05 |
Family
ID=73840955
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011012560.0A Active CN112130860B (zh) | 2020-09-23 | 2020-09-23 | Json对象解析方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112130860B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988142A (zh) * | 2021-04-19 | 2021-06-18 | 广州南方卫星导航仪器有限公司 | 一种属性表生成方法和装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160124722A1 (en) * | 2014-10-31 | 2016-05-05 | Oracle International Corporation | Json stylesheet language transformation |
CN105573758A (zh) * | 2015-12-16 | 2016-05-11 | 福建星网智慧科技股份有限公司 | 基于动态字节码编译技术的codejson框架 |
WO2018090508A1 (zh) * | 2016-11-15 | 2018-05-24 | 平安科技(深圳)有限公司 | 一种基于Keychain的数据管理方法、终端、设备及计算机可读存储介质 |
US20190102389A1 (en) * | 2017-10-04 | 2019-04-04 | Dell Products Lp | Storing and processing json documents in a sql database table |
CN109871519A (zh) * | 2019-02-18 | 2019-06-11 | 北京思特奇信息技术股份有限公司 | 一种无层级结构的json反序列化方法、装置及存储介质 |
CN110059085A (zh) * | 2019-03-18 | 2019-07-26 | 浙江工业大学 | 一种面向Web 2.0的JSON数据解析与建模方法 |
CN110764768A (zh) * | 2018-07-26 | 2020-02-07 | 北京京东金融科技控股有限公司 | 一种模型对象与json对象互转的方法和装置 |
CN111045678A (zh) * | 2019-11-06 | 2020-04-21 | 北京奇艺世纪科技有限公司 | 页面执行动态代码的方法、装置、设备及存储介质 |
US20200272489A1 (en) * | 2019-02-26 | 2020-08-27 | Sap Se | Runtime Execution Of Entities and Services In An Application Object Runtime Environment |
-
2020
- 2020-09-23 CN CN202011012560.0A patent/CN112130860B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160124722A1 (en) * | 2014-10-31 | 2016-05-05 | Oracle International Corporation | Json stylesheet language transformation |
CN105573758A (zh) * | 2015-12-16 | 2016-05-11 | 福建星网智慧科技股份有限公司 | 基于动态字节码编译技术的codejson框架 |
WO2018090508A1 (zh) * | 2016-11-15 | 2018-05-24 | 平安科技(深圳)有限公司 | 一种基于Keychain的数据管理方法、终端、设备及计算机可读存储介质 |
US20190102389A1 (en) * | 2017-10-04 | 2019-04-04 | Dell Products Lp | Storing and processing json documents in a sql database table |
CN110764768A (zh) * | 2018-07-26 | 2020-02-07 | 北京京东金融科技控股有限公司 | 一种模型对象与json对象互转的方法和装置 |
CN109871519A (zh) * | 2019-02-18 | 2019-06-11 | 北京思特奇信息技术股份有限公司 | 一种无层级结构的json反序列化方法、装置及存储介质 |
US20200272489A1 (en) * | 2019-02-26 | 2020-08-27 | Sap Se | Runtime Execution Of Entities and Services In An Application Object Runtime Environment |
CN110059085A (zh) * | 2019-03-18 | 2019-07-26 | 浙江工业大学 | 一种面向Web 2.0的JSON数据解析与建模方法 |
CN111045678A (zh) * | 2019-11-06 | 2020-04-21 | 北京奇艺世纪科技有限公司 | 页面执行动态代码的方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
于治楼;张云涛;张化祥;: "基于JSON规范的服务器动态管理数据获取与分析框架", 信息技术与信息化, no. 03 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988142A (zh) * | 2021-04-19 | 2021-06-18 | 广州南方卫星导航仪器有限公司 | 一种属性表生成方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112130860B (zh) | 2023-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109343857B (zh) | 线上部署机器学习模型的方法、设备和存储介质 | |
US9043757B2 (en) | Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files | |
JP2018097846A (ja) | Api学習 | |
CN106873952B (zh) | 移动端网页开发的数据处理系统和方法、及应用装置 | |
CN111460241B (zh) | 一种数据查询方法、装置、电子设备及存储介质 | |
CN111984264B (zh) | 一种静态库的生成方法和装置 | |
CN108415998B (zh) | 应用依赖关系更新方法、终端、设备及存储介质 | |
CN110727417A (zh) | 一种数据处理方法和装置 | |
CN112817657A (zh) | 一种应用程序启动项加载方法、装置、系统及存储介质 | |
CN111083054B (zh) | 路由配置处理方法、装置、计算机设备和存储介质 | |
CN111984262A (zh) | 微信层叠样式表文件的处理方法、装置、设备及存储介质 | |
CN111459537A (zh) | 冗余代码去除方法、装置、设备与计算机可读存储介质 | |
CN112130860B (zh) | Json对象解析方法、装置、电子设备及存储介质 | |
CN108694172B (zh) | 信息输出方法和装置 | |
CN113806647A (zh) | 识别开发框架的方法及相关设备 | |
CN113821496B (zh) | 数据库迁移方法、系统、设备及计算机可读存储介质 | |
CN112579151A (zh) | 一种模型文件的生成方法和装置 | |
CN110795646A (zh) | 请求处理方法、装置、电子设备和计算机可读存储介质 | |
CN114625373A (zh) | 应用转换方法、装置、电子设备和存储介质 | |
CN113138767B (zh) | 代码语言转换方法、装置、电子设备及存储介质 | |
Settle et al. | aMatReader: Importing adjacency matrices via Cytoscape Automation | |
CN109635175B (zh) | 页面数据拼接方法、装置、可读存储介质和电子设备 | |
CN114281688A (zh) | 一种无码或低码的自动化用例管理方法和装置 | |
CN111881220A (zh) | 列表存储下的数据操作方法、装置、电子设备和存储介质 | |
CN108664535B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |