具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供了一种对象序列化装置,该装置可以通过计算机设备实现其功能。
图1是根据本发明第一实施例的对象序列化装置的结构示意图。如图1所示,该对象序列化装置包括:第一获取单元10、创建单元20、第一转化单元30和生成单元40。
第一获取单元10用于获取目标对象。
目标对象为客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。例如,当对象为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值,从而通过计算机语言表示客观世界中存在的人、事、物体等实体。目标对象可以是任意的客观世界中存在的人、事、物体等实体,这里的目标对象可以是用户输入的需要进行序列化的对象。
创建单元20用于创建与目标对象对应的Json对象,Json对象为具有目标对象的属性的设置操作的类。
Json对象为具有目标对象的属性的设置操作的类,这里的类(Class)是面向对象程序设计语言中的一个概念。实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。一个类定义了一组对象。类具有行为(be-havoir),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。
类实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。类通过接口与外界发生关系。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都像一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值(value)。
创建的Json对象可以对目标对象的属性进行设置操作,以及生成目标对象对应的Json字符串的方法,也即是在Json对象中封装了序列化生成字符串的这一过程。Json对象的类可以是Json对象,也可以是Json值或Json数组,其中,Json值也为一个类,继承Json对象,Json值的类可以用于将一个基本类型的属性值包装成一个Json值对象,提供一个带参数的构造函数,以及生成Json字符串的方法。Json数组也为一个类,用于提供添加方法添加Json值或者Json对象也可以是Json数组,以及生成Json字符串的方法。例如,当目标对象为“王刚”时,目标对象“王刚”符合人的定义,则其属性包括“姓名”、“年龄”、“性别”和“职务”等,由于人的职务可以有很多,因此“姓名”、“年龄”、“性别”可以是目标对象“王刚”的值属性,“职务”可以是目标对象“王刚”的数组属性,创建的Json对象可以对目标对象“王刚”的属性进行相应的设置操作,从而进行相应的序列化。
当然,目标对象的属性为空时,通过本发明实施例的Json对象也可以将其转化为相应的序列化字符串。
第一转化单元30用于将目标对象转化为Json对象。
目标对象为需要进行序列化的对象,由于Json对象中具有生成Json字符串的方法,因此,将被序列化的目标对象转化为Json对象,即,将目标对象映射为Json对象,可以使用Json对象完成目标对象的序列化。将目标对象转化为Json对象可以是将目标对象的属性转化为相应的Json对象,例如,当目标对象的属性包括值属性和数组属性,则可以将目标对象的值属性转化为Json值对象,将的数组属性转化为Json数组对象。目标对象的属性还可以是对像,由于目标对象的对象属性也为对象,因此将目标对象的对象属性转化为Json对象。
生成单元40用于由Json对象生成目标对象的序列化字符串。
在将目标对象转化为Json对象之后,通过对Json对象进行序列化,生成序列化后的Json字符串,该Json字符串即为目标对象的序列化字符串。这样,通过对Json对象序列化实现对目标对象的序列化。
根据本发明实施例,通过创建与目标对象对应的Json对象,并将目标对象转化为该Json对象,由Json对象生成目标对象的序列化字符串,从而实现对目标对象的序列化,由于Json对象生成过程由开发者完成,开发者决定目标对象的哪些成员参与Json生成并构建对应的Json对象,使得序列化结果与目标对象结构之间不需要严格映射,因此可以灵活控制序列化结果。
优选地,目标对象的属性包括对象属性、数组属性和值属性中至少之一,其中,创建单元20包括第一创建模块、第二创建模块和第三创建模块中至少之一。
第一创建模块用于创建与目标对象的属性对应的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数组对象,将目标对象的子对象的值属性转化为Json值对象。
由于Json对象和Json子对象都是对对象的进行属性设置的类,因此,Json子对象也可以称为Json对象,在实际应用中,直接将目标对象的子对象转化为Json对象进行序列化。将目标对象的子对象转化为Json子对象可以是将目标对象的子对象转化为Json对象。相应地,目标对象的子对象可以包括数组属性,因此将数组属性转化为Json数组对象。相应地,目标对象的子对象可以包括值属性,因此将值属性转化为Json值对象。
需要说明的是,目标对象的子对象的属性还可以是包括对象属性、值属性和数组属性中的几种组合属性,则根据子对象的属性进行相应的转化。当然,目标对象的子对象还可以包括子对象,其子对象的处理同目标对象的子对象的处理相同。由此可以看出,可以通过本发明实施例的对象序列化方法对任意对象进行序列化并控制Json序列化生成的结果。
图2是根据本发明第二实施例的对象序列化装置的结构示意图。该实施例的对象序列化装置可以作为上述实施例的对象序列化装置的一种优选实施方式。如图2所示,该对象序列化装置包括:第一获取单元10、创建单元20、第一转化单元30、生成单元40和第三获取单元50,其中,第一转化单元30包括转化模块301。第一获取单元10、创建单元20和生成单元40与图1所示的第一获取单元10、创建单元20和生成单元40功能相同,这里不做赘述。
第三获取单元50用于在获取目标对象之后,获取用户选择的目标对象的属性。
由于目标对象包括多个属性,用户可以选择目标对象的任意的一些属性进行序列化,在获取目标对象之后,获取用户选择的目标对象的属性,以便于对目标对象进行序列化。
转化模块301用于由用户选择的目标对象的属性将目标对象转化为相应的Json对象。
在创建与目标对象对应Json对象之后,由目标对象的属性将目标对象转化为相应的Json对象。例如,目标对象的属性为值属性,则将值属性转化为Json值对象;目标对象的属性为数组属性,则将数组属性转化为Json数组对象;目标对象的属性为对象属性,则将对象属性转化为Json对象。
优选地,本发明实施例的生成单元40包括:第一生成模块、第二生成模块和第三生成模块。
第一生成模块用于将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值和Json数组按照Json语法生成Json字符串,并最终呈现在目标对象序列化后的字符串上。
例如,目标对象为“王刚”,其具有属性为“配偶”,该属性为对象属性,则转化后的字符串为“配偶”:{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}。
Json对象、Json值对象、Json数组对象在序列化期间,会生成不同格式的字符串。以属性名称做为键,冒号为分割,多个属性值以逗号区分。
目标对象(王刚)拥有5个属性,其中包含3个JSON值(姓名,年龄,性别),一个json数组(车辆),和一个Json对象(配偶),其中,目标对象“王刚”的配偶这个Json对象,结果为{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}。
得到最后结果:
{“姓名”:“王刚”,“年龄”:28,“性别”:“男”,“车辆”:[“桑塔纳2000”,“奥迪A6”,“幻影劳斯莱斯”],“配偶”:{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}}
本发明实施例还提供了一种对象序列化方法。该方法可以运行在对象序列化装置上。需要说明的是,本发明实施例的对象序列化方法可以通过本发明实施例所提供的对象序列化装置来执行,本发明实施例的对象序列化装置也可以用于执行本发明实施例所提供的对象序列化方法。
图3是根据本发明第一实施例的对象序列化方法的流程图。如图3所示,该对象序列化方法包括步骤如下:
步骤S101,获取目标对象。
目标对象为客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。例如,当对象为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值,从而通过计算机语言表示客观世界中存在的人、事、物体等实体。目标对象可以是任意的客观世界中存在的人、事、物体等实体,这里的目标对象可以是用户输入的需要进行序列化的对象。
步骤S102,创建与目标对象对应的Json对象,Json对象为具有目标对象的属性的设置操作的类。
Json对象为具有目标对象的属性的设置操作的类,这里的类(Class)是面向对象程序设计语言中的一个概念。实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。一个类定义了一组对象。类具有行为(be-havoir),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。
类实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。类通过接口与外界发生关系。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都像一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值(value)。
创建的Json对象可以对目标对象的属性进行设置操作,以及生成目标对象对应的Json字符串的方法,也即是在Json对象中封装了序列化生成字符串的这一过程。Json对象的类可以是Json对象,也可以是Json值或Json数组,其中,Json值也为一个类,继承Json对象,Json值的类可以用于将一个基本类型的属性值包装成一个Json值对象,提供一个带参数的构造函数,以及生成Json字符串的方法。Json数组也为一个类,用于提供添加方法添加Json值或者Json对象也可以是Json数组,以及生成Json字符串的方法。例如,当目标对象为“王刚”时,目标对象“王刚”符合人的定义,则其属性包括“姓名”、“年龄”、“性别”和“职务”等,由于人的职务可以有很多,因此“姓名”、“年龄”、“性别”可以是目标对象“王刚”的值属性,“职务”可以是目标对象“王刚”的数组属性,创建的Json对象可以对目标对象“王刚”的属性进行相应的设置操作,从而进行相应的序列化。
当然,目标对象的属性为空时,通过本发明实施例的Json对象也可以将其转化为相应的序列化字符串。
步骤S103,将目标对象转化为Json对象。
目标对象为需要进行序列化的对象,由于Json对象中具有生成Json字符串的方法,因此,将被序列化的目标对象转化为Json对象,即,将目标对象映射为Json对象,可以使用Json对象完成目标对象的序列化。将目标对象转化为Json对象可以是将目标对象的属性转化为相应的Json对象,例如,当目标对象的属性包括值属性和数组属性,则可以将目标对象的值属性转化为Json值对象,将的数组属性转化为Json数组对象。目标对象的属性还可以是对像,由于目标对象的对象属性也为对象,因此将目标对象的对象属性转化为Json对象。
步骤S104,由Json对象生成目标对象的序列化字符串。
在将目标对象转化为Json对象之后,通过对Json对象进行序列化,生成序列化后的Json字符串,该Json字符串即为目标对象的序列化字符串。这样,通过对Json对象序列化实现对目标对象的序列化。
根据本发明实施例,通过创建与目标对象对应的Json对象,并将目标对象转化为该Json对象,由Json对象生成目标对象的序列化字符串,从而实现对目标对象的序列化,由于Json对象生成过程由开发者完成,开发者决定目标对象的哪些成员参与Json生成并构建对应的Json对象,使得序列化结果与目标对象结构之间不需要严格映射,因此可以灵活控制序列化结果。
优选地,目标对象的属性包括对象属性、数组属性和值属性中至少之一,其中,步骤S102包括以下至少之一:
步骤S11,创建与目标对象的属性对应的Json子对象,Json子对象为用于对对象属性进行序列化操作的类。由于Json对象和Json子对象都是对对象的进行属性设置的类,因此,Json子对象也可以称为Json对象,在实际应用中,直接将目标对象的对象属性转化为Json对象进行序列化。
步骤S12,创建与目标对象的属性对应的Json数组对象,Json数组对象为对数组属性进行序列化操作的类。
步骤S13,创建与目标对象的属性对应的Json值对象,Json值对象为对值属性进行序列化操作的类。
对象的属性可以是对象属性、数组属性和值属性,也即是目标对象的属性可以是对象,可以是数组,还可以是值,还可以是其中任意几个的组合,或者属性为空。例如,当目标对像为“王刚”,符合人的定义,其属性包括“姓名”、“年龄”、“性别”等属性,这些属性为值属性,则可以创建与目标对象对应的Json值对象以对目标对象的值属性进行转化;如果目标对像“王刚”还可以包括“职务”属性,则可以创建与目标对象对应的Json数组对象,对目标对象的数组属性进行转化;目标对像“王刚”还可以包括“配偶”属性,“配偶”为对象属性,可以称为目标对象的子对象,则创建与目标对象对应的Json子对象,对目标对象的对象属性进行转化。
根据本发明实施例,可以根据目标对象的不同属性,创建不同的Json对象(如Json子对象、Json数组对象和Json值对象等),对目标对象进行相应的序列化。当然,在目标对象的属性发生变化时,也可以根据变化后的属性创建相应的Json对象,从而使得转化后的Json对象可以是Json对象、Json数组对象和Json值对象中的任意几个的组合,因此可以灵活地对目标对象进行序列化,而不限定于目标对象的任何属性类型。
优选地,目标对象包括子对象,在步骤S101之后,对象序列化方法还包括:步骤S1011,获取目标对象的子对象。
目标对象的子对象可以是目标对象的对象属性对应的对象。例如,当目标对象为“王刚”时,可以包括“配偶”属性,其配偶为“李梅”,则“李梅”为目标对象“王刚”的子对象。由于子对象“李梅”具有多种属性,如“姓名”、“年龄”和“职务”等,因此,获取目标对象的子对象以便于对目标对象的子对象进行相应的递归序列化。
在步骤S103之后,对象序列化方法还包括:
步骤S1031,将目标对象的子对象转化为Json子对象。
由于Json对象和Json子对象都是对对象的进行属性设置的类,因此,Json子对象也可以称为Json对象,在实际应用中,直接将目标对象的子对象转化为Json对象进行序列化。将目标对象的子对象转化为Json子对象可以是将目标对象的子对象转化为Json对象。
步骤S1032,将目标对象的子对象的数组属性转化为Json数组对象。
相应地,目标对象的子对象可以包括数组属性,因此将数组属性转化为Json数组对象。
步骤S1033,将目标对象的子对象的值属性转化为Json值对象。
相应地,目标对象的子对象可以包括值属性,因此将值属性转化为Json值对象。
需要说明的是,目标对象的子对象的属性还可以是包括对象属性、值属性和数组属性中的几种组合属性,则根据子对象的属性进行相应的转化。当然,目标对象的子对象还可以包括子对象,其子对象的处理同目标对象的子对象的处理相同。由此可以看出,可以通过本发明实施例的对象序列化方法对任意对象进行序列化并控制Json序列化生成的结果。
图4是根据本发明第二实施例的对象序列化方法的流程图。该实施例的对象序列化方法可以是上述实施例的对象序列化方法的一种优选实施方式。如图4所示,该对象序列化方法包括步骤如下:
步骤S201,获取目标对象。
目标对象为客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。例如,当对象为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值,从而通过计算机语言表示客观世界中存在的人、事、物体等实体。目标对象可以是任意的客观世界中存在的人、事、物体等实体,这里的目标对象可以是用户输入的需要进行序列化的对象。
步骤S202,获取用户选择的目标对象的属性。
由于目标对象包括多个属性,用户可以选择目标对象的任意的一些属性进行序列化,在获取目标对象之后,获取用户选择的目标对象的属性,以便于对目标对象进行序列化。
步骤S203,创建与目标对象对应Json对象。
在获取目标对象的属性之后,可以根据获取到的获取目标对象的属性创建目标对象对应Json值,Json值也为一个类,继承Json对象,Json值的类可以用于将一个基本类型的属性值包装成一个Json值对象,提供一个带参数的构造函数,以及生成Json字符串的方法。其中,带参数的构造函数会根据不同类型的参数输入,决定生成Json字符串的格式。例如,如果用户选择的目标对象的属性只包含值属性,则可以创建Json值对象,以便于将目标对象的值属性转化为相应的Json值对象。
步骤S204,由用户选择的目标对象的属性将目标对象转化为相应的Json对象。
在创建与目标对象对应Json对象之后,由目标对象的属性将目标对象转化为相应的Json对象。例如,目标对象的属性为值属性,则将值属性转化为Json值对象;目标对象的属性为数组属性,则将数组属性转化为Json数组对象;目标对象的属性为对象属性,则将对象属性转化为Json对象。
步骤S205,由Json对象生成目标对象的序列化字符串。
在将目标对象转化为Json对象之后,通过对Json对象进行序列化,生成序列化后的Json字符串,该Json字符串即为目标对象的序列化字符串。这样,通过对Json对象序列化实现对目标对象的序列化。
根据本发明实施例,用户可以根据需要选择的目标对象的属性添加相应的Json对象,进行序列化处理,或者根据需要选择目标对象的部分属性不进行序列化,从而避免了按照固定的结构进行序列化的问题,增强了对对像进行序列化的灵活性。
优选地,步骤S104或者步骤S205可以包括以下步骤:
步骤S301,将Json对象的Json值对象按照Json语法生成Json字符串。
将Json值对象按照Json语法生成Json字符串,可以是以键值对的方式生成Json字符串,例如,当目标对象为“王刚”时,其包含“姓名”属性,则通过Json值对象按照键值对的形式生成Json字符串为“‘姓名’:‘王刚’”,其中,‘姓名’为键,‘王刚’为值,中间以冒号隔开,从而生成了键值对的形式的Json字符串。
步骤S302,将Json对象的Json数组对象按照Json语法生成Json字符串。
将Json对象的Json数组对象按照Json语法生成Json字符串,并以键值的方式呈现在序列化后的字符串上。
例如,当对象为“李梅”时,其对应的属性为“职务”,该属性为数组,在转化的过程中将其转化后的字符串为“职务”:[“顾问”,”母亲”]。
步骤S303,将目标对象的对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串。
由于目标对象包括对象属性,其对象属性对应的对象还可以包括对象属性、值属性和数组属性,则对应的将对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串,并最终呈现在目标对象序列化后的字符串上。
例如,目标对象为“王刚”,其具有属性为“配偶”,该属性为对象属性,则转化后的字符串为“配偶”:{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}。
Json对象、Json值对象、Json数组对象在序列化期间,会生成不同格式的字符串。以属性名称做为键,冒号为分割,多个属性值以逗号区分。
目标对象(王刚)拥有5个属性,其中包含3个JSON值(姓名,年龄,性别),一个json数组(车辆),和一个Json对象(配偶),其中,目标对象“王刚”的配偶这个Json对象,结果为{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}。
得到最后结果:
{“姓名”:“王刚”,“年龄”:28,“性别”:“男”,“车辆”:[“桑塔纳2000”,“奥迪A6”,“幻影劳斯莱斯”],“配偶”:{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}}
从而完成序列化的对象转化和生成目标字符串的过程。
下面以C#语言为例,对本方案的一个应用场景进行描述。
首先对Json的类做一个编程级别的命名,Json对象命名为JsonObject,Json数组命名为JsonArray,Json值命名为JsonValue。实现步骤如下:
步骤1,创建一个测试类(书籍Book类),Book类包含了多个属性,如整数的ID为标识,书籍编号ISBN,作者Author、出版社Publisher、备注Remarks和一个时
步骤2,创建一个书籍类的测试对象,其对应的整数的ID为标识,书籍编号ISBN,作者Author、出版社Publisher、备注Remarks和一个时间类型的出版日期PublishDate等属性均具有对应属性值,代码如下:
步骤3,创建一个JsonObject对象,代码如下:
JsonObject joBook=new JsonObject();
步骤4,添加Json对象(joBook)的属性,代码如下:
步骤5,由于备注Remarks为空,为了节省有可能的网络传输,这个字段将不会包含在JsonObject中,也不会参与Json对象的序列化。
步骤6,调用Json对象(joBook)的序列化方法获得Book对象序列化后的Json字符串,代码如下:
{"ID":1,"ISBN":"000-0-0000-0000-0","Author":"XXX","PublishDate":"1999-9-9","Publisher":"XXX"}
对于复杂对象的序列化,数组与步骤4同样的方式创建JsonArray对象并对joBook赋值;包含子对象的序列化,首先使用步骤4的方式创建测试对象和子对象,然后对测试对象进行子对象的赋值操作。通过反复/嵌套应用步骤4和复杂对象的序列化方法,对任意对象进行序列化,并控制Json生成结果。
根据上述实施例的描述,可以得出本发明实施例取得的效果:
由于Json对象封装了序列化生成字符串这一过程,开发者仅需要调用Json对象的序列化方法即可,无需了解Json格式,避免字符串操作的复杂度可能引起的错误,即使完全不了解Json的开发者,也可以完成对象的序列化。由于整个过程中均为面向对象的操作方式,大大降低了开发的复杂度,降低出错概率,节省了开发者时间。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。