CN103970855B - 一种数据处理设备和方法 - Google Patents
一种数据处理设备和方法 Download PDFInfo
- Publication number
- CN103970855B CN103970855B CN201410187386.1A CN201410187386A CN103970855B CN 103970855 B CN103970855 B CN 103970855B CN 201410187386 A CN201410187386 A CN 201410187386A CN 103970855 B CN103970855 B CN 103970855B
- Authority
- CN
- China
- Prior art keywords
- data
- value
- items
- type
- processor
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据处理设备和方法,属于互联网技术领域。所述数据处理方法包括:从服务器的特定接口获取字符串,所述字符串具有预定数据格式,并包括一个或多个数据项目,每个数据项目包括数据项目的名称和相关联的值;根据所述字符串生成数据处理器,所述数据处理器适于对所述字符串所具有的预定数据格式的数据进行处理以生成数据对象;对于来自所述服务器的特定接口的目标字符串,利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象。本发明提高了将字符串转换为数据对象的转换速度,进而提高了网站页面的响应速度。
Description
技术领域
本发明涉及互联网技术领域,具体涉及一种数据处理设备和方法。
背景技术
在互联网应用中,服务器与服务器之间存在数据交换的需求,而二者通常是采用字符串例如JSON字符串来进行所述数据交换。例如,在第一服务器中,首先将需要传输到第二服务器的数据对象转换(序列化)为JSON字符串,然后,在第二服务器中将接收到的JSON字符串转换(反序列化)为数据对象,并根据所述数据对象来动态构建网页,将所构建的网页提供给客户端浏览器。
其中,JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,是基于JavaScript(Standard ECMA-2623rd Edition-December1999)脚本语言的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯,这些特性使JSON成为理想的数据交换语言。
如何将字符串例如JSON字符串反序列化为数据对象,现有技术中主要提供如下三种方式。
第一种方式采用反射机制来生成数据对象。反射机制是指程序在运行状态中,对于任意一个类(class),都能够知道这个类的所有属性和方法,对于任意一个对象(object),都能够调用它的任意一个方法。但是,每进行一次反射,都要需要消耗一些系统资源和处理时间,因此,通过反射机制进行字符串反序列化的速度较慢,在要求高并发的情况下,网页的响应速度也较慢。
第二种方式采用目前业界较流行的FastJson来进行反序列化处理,其可以通过缓存反射的相关信息,来加快数据转换的速度。但是在动态编辑站点中,由于对象的属性名称可能会经常发生变化,导致缓存的反射信息失效,仍然需要频繁的进行反射处理,从而使得该种方式下字符串反序列化处理的速度也不够理想。
第三种方式是采用数据字典来存放字符串中的数据,但是数据字典是一种弱类型的数据结构,编写访问数据字典的代码较麻烦,编写的代码不易读且不易维护。
因此,如何提高对字符串例如JSON字符串的反序列化处理的便利性和高效性,从而提高网页的响应速度,就成为亟待解决的技术问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据处理设备和方法。
根据本发明的一个方面,提供了一种数据处理方法,包括:
从服务器的特定接口获取字符串,所述字符串具有预定数据格式,并包括一个或多个数据项目,每个数据项目包括数据项目的名称和相关联的值;
根据所述字符串生成数据处理器,所述数据处理器适于对所述字符串所具有的预定数据格式的数据进行处理以生成数据对象;以及
对于来自所述服务器的特定接口的目标字符串,利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象。
可选地,所述根据所述字符串生成数据处理器包括:
根据所述字符串生成包括数据项目的名称和数据项目的值的关联关系的数据字典;
从所述数据字典中获取各个数据项目,并确定各个数据项目的值的数据类型,以每个数据项目的名称作为属性名称、相关联的值的数据类型作为属性的数据类型,构造成所述数据处理器要处理的数据对象的一个属性;
根据所述数据字典的结构与数据处理器要处理的数据对象的结构的对应关系,生成所述数据处理器对所述数据对象进行初始化的初始化方法,所述初始化方法适于根据所述数据字典为数据对象的每个属性赋予属性值。
可选地,所述利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象包括:
根据所述目标字符串生成包括数据项目的名称和数据项目的值的关联关系的目标数据字典;
利用所述数据处理器的初始化方法,根据所述目标数据字典为目标数据对象的每个属性赋予属性值,从而生成相对应的目标数据对象。
可选地,所述预定数据格式为JSON,所述确定各个数据项目的值的数据类型包括:
当数据项目的值包括于双引号之内时,确定该数据项目的值的数据类型为字符型;
当数据项目的值为数字时,确定该数据项目的值的数据类型为数值型;
当数据项目的值为true或者false时,确定该数据项目的值的数据类型为逻辑型;
当数据项目的值包括于中括号之内时,确定该数据项目的值的数据类型为数组;
当数据项目的值包括于大括号之内时,确定该数据项目的值的数据类型为JSON。
可选地,当数据项目的值的数据类型为数组时,则所生成的数据处理器中与该数据项目对应的属性的数据类型为列表;
当数据项目的值或者所述数组的元素的数据类型为JSON时,则所生成的数据处理器中与该数据项目对应的属性或者所述列表的列表项的数据类型为对象,并且,所述数据处理方法还包括生成用于对相应JSON字符串中的数据进行处理以生成数据对象的第二数据处理器,以及,在所述数据处理器的初始化方法中还包括对所述第二数据处理器的初始化方法的引用。
根据本发明的另一方面,提供了一种数据处理设备,包括:
字符串获取器,适于从服务器的特定接口获取字符串,所述字符串具有预定数据格式,并包括一个或多个数据项目,每个数据项目包括数据项目的名称和相关联的值;
数据处理器构造器,适于根据所述字符串生成数据处理器,所述数据处理器适于对所述字符串所具有的预定数据格式的数据进行处理以生成数据对象;以及
数据对象生成器,适于对于来自所述服务器的特定接口的目标字符串,利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象。
可选地,所述数据处理器构造器包括:
数据字典生成器,适于根据所述字符串生成包括数据项目的名称和数据项目的值的关联关系的数据字典;
属性构造器,适于从所述数据字典中获取各个数据项目,并确定各个数据项目的值的数据类型,以每个数据项目的名称作为属性名称、相关联的值的数据类型作为属性的数据类型,构造成所述数据处理器要处理的数据对象的一个属性;
方法构造器,适于根据所述数据字典的结构与数据处理器要处理的数据对象的结构的对应关系,生成所述数据处理器对所述数据对象进行初始化的初始化方法,所述初始化方法适于根据所述数据字典为数据对象的每个属性赋予属性值
可选地,所述数据对象生成器包括:
目标数据字典生成器,适于根据所述目标字符串生成包括数据项目的名称和数据项目的值的关联关系的目标数据字典;
方法执行器,适于利用所述数据处理器的初始化方法,根据所述目标数据字典为目标数据对象的每个属性赋予属性值,从而生成相对应的目标数据对象
可选地,所述预定数据格式为JSON,所述属性构造器按照如下方式确定各个数据项目的值的数据类型:
当数据项目的值包括于双引号之内时,确定该数据项目的值的数据类型为字符型;
当数据项目的值为数字时,确定该数据项目的值的数据类型为数值型;
当数据项目的值为true或者false时,确定该数据项目的值的数据类型为逻辑型;
当数据项目的值包括于中括号之内时,确定该数据项目的值的数据类型为数组;
当数据项目的值包括于大括号之内时,确定该数据项目的值的数据类型为JSON。
可选地,当数据项目的值的数据类型为数组时,则所述数据处理器构造器所生成的数据处理器中与该数据项目对应的属性的数据类型为列表;
当数据项目的值或者所述数组的元素的数据类型为JSON时,则所述数据处理器构造器所生成的数据处理器中与该数据项目对应的属性或者所述列表的列表项的数据类型为对象,并且,所述数据处理器构造器还进一步生成用于对相应JSON字符串中的数据进行处理以生成数据对象的第二数据处理器,以及,在所述数据处理器的初始化方法中添加对所述第二数据处理器的初始化方法的引用。
根据本发明上述的一个或多个技术方案,通过预先构造适于对字符串所具有的预定数据格式的数据进行处理以生成数据对象的数据处理器,这样,对于相同结构的目标字符串,不需要进行反射处理,就可以利用所述数据处理器将其处理成相对应的目标数据对象,有效提高了将字符串转换为数据对象的转换速度,进而提高了网站页面的响应速度。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的数据处理系统的结构图;
图2示出了根据本发明一个实施例的数据处理设备的结构图;
图3示出了根据本发明一个实施例的数据处理设备中数据处理器构造器的结构图;
图4示出了根据本发明一个实施例的数据处理设备中数据对象生成器的结构图;
图5示出了根据本发明一个实施例的数据处理方法的流程图;以及
图6示出了根据本发明一个实施例的JSON到类生产器的运行界面。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的数据处理系统的结构图。如图1所示,所述数据处理系统包括第一服务器110、第二服务器120和多个客户端130(图中示出了3个),第一服务器110和第二服务器120经由互联网络而相互通信,每个客户端130和第二服务器120也经由互联网络而相互通信。
第一服务器110可以为数据服务器,该数据服务器为第二服务器120提供各种数据资源,第二服务器120可以是一个网站系统,该网站系统可以为这些客户端130提供各种网络资源。
在本发明实施例中,客户端130可以是本领域任何可以呈现从网站系统获取的网络资源的设备,包括但不限于桌面型计算机、笔记本式计算机、个人数字助理、智能移动终端和平板电脑等。客户端130上运行有浏览器,所述浏览器能够呈现从网站系统获取的各种网络资源例如网页文件(html文件)。
第一服务器110与第二服务器120之间存在数据交换的需求,而二者通常是采用字符串(例如JSON字符串)来进行所述数据交换。在第一服务器110中,首先将需要传输到第二服务器120的数据对象转换(序列化)为字符串(例如为JSON字符串),然后将转换得到的字符串通过接口传输到第二服务器120。在第二服务器120中,首先通过接口接收第一服务器110发送的字符串,然后,将所述字符串转换(反序列化)为数据对象,并根据所述数据对象来动态构建网页,将所构建的网页提供给客户端浏览器。
例如,在一种应用场景中,第一服务器110为汽车经销商服务器,第二服务器120为汽车资讯服务器,汽车经销商服务器将销售汽车的各种优惠信息(即前述的数据对象)转换为JSON字符串后传输到汽车资讯服务器,汽车资讯服务器接收到JSON字符串后,将其转换为数据对象,并根据所述数据对象构造网页后发送给客户端130,客户端130中的浏览器对网页文件进行解析和呈现。于是,销售汽车的各种优惠信息并展示在客户端中。
为了提高用户的体验效果,网站系统需要对客户端的网页请求提供快速的响应。但是,如前所述,在现有技术中,网站系统(例如ASP.NET网站)在动态构建网页时,对字符串进行反序列化时要么采用反射机制,而通过反射进行字符串反序列化的速度较慢,导致网页的响应速度也较慢;要么采用数据字典来存放字符串中的数据,但是数据字典是一种弱类型的数据结构,编写访问数据字典的代码较麻烦,编写的代码不易读且不易维护。
有鉴于此,本发明实施例提供一种数据处理设备和方法,通过预先构造适于对字符串所具有的预定数据格式的数据进行处理以生成数据对象的数据处理器,这样,对于目标字符串,不需要进行反射处理,就可以利用所述数据处理器将其处理成相对应的目标数据对象,有效提高了将字符串转换为数据对象的转换速度,进而提高了网站页面的响应速度。
以下对本发明实施例的数据处理设备和方法进行详细描述。其中,所述数据处理设备位于第二服务器120中,所述数据处理方法由所述第二服务器120执行。
图2示出了根据本发明一个实施例的数据处理设备200的结构图。如图2所示,数据处理设备200包括字符串获取器210、数据处理器构造器220和数据对象生成器230。
字符串获取器210适于从第二服务器120的特定接口(预定接口)获取字符串,所述字符串具有预定数据格式,并包括一个或多个数据项目,每个数据项目包括数据项目的名称和相关联的值。
所述预定数据格式可以是JSON格式或者其他类似的数据格式。其中JSON字符串的数据是一个无序的“名称-值”对的集合,每个“名称-值”对即为上述的一个数据项目。JSON字符串以“{”开始,以“}”结束,每个“名称”后跟一个“:”,各“名称-值”对之间使用“,”分割。“值”的数据类型可以是字符型、数值型、逻辑型、数组或JSON(即JSON字符串中还可以嵌套JSON字符串)等。数组以“[”开始,以“]”结束,数组的元素之间使用“,”分割,各元素的数据类型同样可以是字符型、数值型、逻辑型、数组或JSON等。
在本发明实施例中,对于每种结构的字符串(指相同结构的数据对象对应的字符串,与前述的预定数据格式无关),都会生成对应的数据处理器,而每种结构的字符串都来自第二服务器120的一个特定接口(预定接口),即每种结构的字符串对应一个特定接口,不同结构的字符串对应的特定接口不相同,具体使用的接口可以由第一服务器110和第二服务器120约定。例如,对于第一结构类型的JSON字符串,对应的特定接口为第二服务器120的接口1,对于第二结构类型的JSON字符串,对应的特定接口为第二服务器120的接口2。
数据处理器构造器220适于根据所述字符串生成数据处理器,所述数据处理器适于对所述字符串所具有的预定数据格式的数据进行处理以生成数据对象。所述数据处理器可以是面向对象编程中的类(class),类是对某种类型的对象(object)定义属性和方法的原型,它表示对现实生活中一类具有共同特征的事物的抽象。
对于来自第二服务器120的某个特定接口的字符串,数据处理器构造器220可以对该字符串中包括的数据进行分析,抽取出其包括的每个数据项目的名称和相关联的值,并获取各个值的数据类型,并以此来构造数据处理器例如类的结构和初始化方法。数据处理器的结构是指该数据处理器所具有的一个或多个属性,每个属性包括属性名称和属性值的数据类型,在数据处理器的结构中,属性还没有具体的值,通过执行初始化方法,能够为属性赋值,从而生成与字符串对应的数据对象。数据处理器结构的构造方法为:以每个数据项目的名称作为属性名称、相关联的值的数据类型作为属性的数据类型,构造成数据处理器的一个属性。数据处理器的初始化方法可以根据字符串中包括的数据项目的结构与要处理的数据对象的结构的对应关系构造得到(将字符串中数据项目的值赋予给数据处理器的相应属性)。
数据对象生成器230适于对于来自第二服务器120的特定接口的目标字符串,利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象。
如前所述,对于第二服务器120的每个特定接口,其接收的字符串具有相同的结构,对应于同一种结构的数据对象。因此,通过数据处理器构造器220生成与该种类型的字符串对应的数据处理器例如类之后,当有目标字符串到达该特定接口时,就可以由与之对应的数据处理器对该目标字符串进行处理,将目标字符串中各数据项目的值赋予给数据处理器的相应属性,从而生成相对应的目标数据对象。
图3示出了根据本发明一个实施例的数据处理设备中数据处理器构造器220的结构图。参照图3,数据处理器构造器220包括数据字典生成器310、属性构造器320和方法构造器330。
数据字典生成器310适于根据所述字符串生成包括数据项目的名称和数据项目的值的关联关系的数据字典。例如,当所述字符串为JSON字符串时,可以利用FastJSON或者其他第三方工具将该JSON字符串编译成数据字典。数据字典是一种弱类型的数据结构,虽然根据数据字典可以生成与字符串对应的数据对象,但是,编写访问数据字典的代码较麻烦(需要手工输入待生成的数据对象的各属性名称来获取相应的属性值),编写的代码不易读且不易维护。因此,在本发明实施例中,不是直接根据数据字典来生成数据对象,而是根据数据字典来生成数据处理器,由数据处理器来生成数据对象。
属性构造器320适于从所述数据字典中获取各个数据项目,并确定各个数据项目的值的数据类型,以每个数据项目的名称作为属性名称、相关联的值的数据类型作为属性的数据类型,构造成所述数据处理器要处理的数据对象的一个属性。
当字符串的预定数据格式为JSON时,属性构造器320可以按照如下方式确定各个数据项目的值的数据类型:当数据项目的值包括于双引号(“”)之内时,确定该数据项目的值的数据类型为字符型;当数据项目的值为数字时,确定该数据项目的值的数据类型为数值型;当数据项目的值为true(真)或者false(假)时,确定该数据项目的值的数据类型为逻辑型;当数据项目的值包括于中括号([])之内时,确定该数据项目的值的数据类型为数组;当数据项目的值包括于大括号({})之内时,确定该数据项目的值的数据类型为JSON。
另外,当数据项目的值的数据类型为数组时,则属性构造器320所生成的数据处理器的结构中与该数据项目对应的属性的数据类型为列表(list);进一步,当数组的元素的数据类型为JSON时,则属性构造器320所生成的数据处理器的结构中所述列表的列表项的数据类型为对象(object)。类似地,当数据项目的值的数据类型为JSON时,则属性构造器320所生成的数据处理器的结构中与该数据项目对应的属性也为对象(object)。
方法构造器330适于根据所述数据字典的结构与数据处理器要处理的数据对象的结构的对应关系,生成所述数据处理器对所述数据对象进行初始化的初始化方法,所述初始化方法适于根据所述数据字典为数据对象的每个属性赋予属性值。
如前所述,对于JSON字符串,还可能存在嵌套结构,即该JSON字符串中的一个或多个数据项目的值为JSON字符串(又或者,该数据项目为数组,且数组的元素为JSON字符串),此种情况下,所述数据处理器构造器220还进一步生成用于对嵌套结构的内层JSON字符串中的数据进行处理以生成数据对象(此数据对象是前述的数据处理器生成的数据对象的一个属性)的第二数据处理器,以及,在所述数据处理器的初始化方法中添加对所述第二数据处理器的初始化方法的引用。第二数据处理器的构造方法与前述的数据处理器的构造方法的原理相同(仅字符串的来源不同),这里不做赘述。
通过属性构造器320的处理,得到了数据处理器的结构,该结构包括多个属性,每个属性对应字符串中的一个数据项目,通过方法构造器330的处理,得到了数据处理器的初始化方法,通过该初始化方法可以为每个属性赋予属性值。具备结构和初始化方法的数据处理器则能够将目标字符串对应的数据字典转换为目标数据对象。
图4示出了根据本发明一个实施例的数据处理设备中数据对象生成器230的结构图。参照图4,数据对象生成器230包括目标数据字典生成器410和方法执行器420。
目标数据字典生成器410适于根据所述目标字符串生成包括数据项目的名称和数据项目的值的关联关系的目标数据字典。例如,当所述目标字符串为JSON字符串时,可以利用FastJSON或者其他第三方工具将该JSON字符串编译成目标数据字典。
方法执行器420适于利用所述数据处理器的初始化方法,根据所述目标数据字典为目标数据对象的每个属性赋予属性值,从而生成相对应的目标数据对象。例如,当所述数据处理器为类时,可以根据所述目标数据字典将所述类实例化为目标数据对象。
根据本发明实施例的数据处理设备,对于某种结构的字符串,先生成与该字符串对应的数据字典,该数据字典为弱类型结构,再根据该数据字典生成强类型结构的数据处理器例如类,然后,根据该数据处理器就能够对相同类型的字符串进行反序列化处理得到对应的数据对象。由于不需要反射处理,因此,根据该数据处理设备生成数据对象,并根据该数据对象动态构造网页时,能够提高网页的响应速度。具体地,在动态编译的站点(例如ASP.NET网站)中反序列化的响应时间相比反射处理机制大大提高,时间减少了80%左右。代价就是对每一种结构的字符串要多维护一段初始化代码,但该代码可以采用工具(数据处理器构造器220)统一生成。
这里对上述的“弱类型”和“强类型”做一补充说明。数据字典是一种弱类型的数据结构,编写访问数据字典的代码时,需要手工输入待生成的数据对象的各属性名称来获取相应的属性值。例如,对于数据字典Dic<string,object>,其包含的数据条目的名称包括“returncode”、“message”和“result”,需要获取“returncode”对应的值时,则需要手工输入:Dic[“returncode”]。对于前述的数据处理器,其是一种强类型的数据结构,假设其包括三个属性,属性名称分别为“returncode”、“message”和“result”,根据该数据处理器生成的对象为data,则需要获取“returncode”对应的值时,则只需要输入“data.”,之后,属性名称“returncode”、“message”和“result”会以列表的方式呈现,编程人员仅需从列表中选择returncode”即可。可见,相比于弱类型数据结构,采用强类型数据结构在编写代码时会更加方便。
图5示出了根据本发明一个实施例的数据处理方法的流程图。如图5所示,所述数据处理方法始于步骤S510,在步骤S510中,从服务器的特定接口获取字符串,所述字符串具有预定数据格式,并包括一个或多个数据项目,每个数据项目包括数据项目的名称和相关联的值。所述预定数据格式可以是JSON格式或者其他类似的数据格式。在本发明实施例中,对于每种结构的字符串(指相同结构的数据对象对应的字符串,与前述的预定数据格式无关),都会生成对应的数据处理器,而每种结构的字符串都来自服务器的一个特定接口(预定接口),即每种结构的字符串对应一个特定接口,不同结构的字符串对应的特定接口不相同。
需要说明的是,步骤S510中所执行的处理与数据处理设备中的字符串获取器210所执行的处理相同,具体可参照上文对字符串获取器210的描述,这里不做赘述。
随后,在步骤S520中,根据所述字符串生成数据处理器,所述数据处理器适于对所述字符串所具有的预定数据格式的数据进行处理以生成数据对象。所述数据处理器可以是面向对象编程中的类(class)。
步骤S520中根据所述字符串生成数据处理器的过程具体包括:首先,根据所述字符串生成包括数据项目的名称和数据项目的值的关联关系的数据字典;然后,从所述数据字典中获取各个数据项目,并确定各个数据项目的值的数据类型,以每个数据项目的名称作为属性名称、相关联的值的数据类型作为属性的数据类型,构造成所述数据处理器要处理的数据对象的一个属性;最后,根据所述数据字典的结构与数据处理器要处理的数据对象的结构的对应关系,生成所述数据处理器对所述数据对象进行初始化的初始化方法,所述初始化方法适于根据所述数据字典为数据对象的每个属性赋予属性值。
其中,当字符串的预定数据格式为JSON时,可以按照如下方式确定各个数据项目的值的数据类型:当数据项目的值包括于双引号(“”)之内时,确定该数据项目的值的数据类型为字符型;当数据项目的值为数字时,确定该数据项目的值的数据类型为数值型;当数据项目的值为true(真)或者false(假)时,确定该数据项目的值的数据类型为逻辑型;当数据项目的值包括于中括号([])之内时,确定该数据项目的值的数据类型为数组;当数据项目的值包括于大括号({})之内时,确定该数据项目的值的数据类型为JSON。
另外,当数据项目的值的数据类型为数组时,则所生成的数据处理器的结构中与该数据项目对应的属性的数据类型为列表(list);进一步,当数组的元素的数据类型为JSON时,则所生成的数据处理器的结构中所述列表的列表项的数据类型为对象(object)。类似地,当数据项目的值的数据类型为JSON时,则所生成的数据处理器的结构中与该数据项目对应的属性也为对象(object)。
如前所述,对于JSON字符串,还可能存在嵌套结构,即该JSON字符串中的一个或多个数据项目的值为JSON字符串(又或者,该数据项目为数组,且数组的元素为JSON字符串),此种情况下,在步骤S520中还进一步生成用于对嵌套结构的内层JSON字符串中的数据进行处理以生成数据对象(此数据对象是前述的数据处理器生成的数据对象的一个属性)的第二数据处理器,以及,在所述数据处理器的初始化方法中添加对所述第二数据处理器的初始化方法的引用。
需要说明的是,步骤S520中所执行的处理与数据处理设备中的数据处理器构造器220所执行的处理相同,具体可参照上文对数据处理器构造器220的描述,这里不做赘述。
根据步骤S520得到了数据处理器的结构的初始化方法后,所述数据处理方法进入步骤S530。在步骤S530中,对于来自所述服务器的特定接口的目标字符串,利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象。所述利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象具体可以包括:根据所述目标字符串生成包括数据项目的名称和数据项目的值的关联关系的目标数据字典;利用所述数据处理器的初始化方法,根据所述目标数据字典为目标数据对象的每个属性赋予属性值,从而生成相对应的目标数据对象。
以下给出本发明的一个应用实例。在该应用实例中,网站系统采用ASP.NET来动态构建网页,从服务器的特定接口接收到的字符串的预定数据格式为JSON,所构造的数据处理器为类(class)。
首先,根据接口的一个url地址,例如http://club.api.autohome.com.cn/api/www/TopicPushToWWW?_appid=cms&bbsid=18,将该url地址产生的json内容拷贝到json数据区。
该url地址产生的json字符串如下:
{"returncode":0,"message":"","result":[
{"title":"合理利用私人时间奥迪A6L首保杂谈","postdate":"2013-10-0214:58:31","imgurl":"http://img.autohome.com.cn/album/","url":"http://club.autohome.com.cn/bbs/thread-c-18-25141407-1.html"},
{"title":"情人眼里出西施奥迪A6L TFSI购车记","postdate":"2013-09-0910:03:16","imgurl":"http://img.autohome.com.cn/album/images/2013/8/26/7a409adc-0919-41f2-bac8-129864c8335f12090.GIF","url":"http://club.autohome.com.cn/bbs/thread-c-18-24265082-1.html"},
……
{"title":"精挑细选第603季:购置凌派1.8L豪华版","postdate":"2013-10-1409:33:00","imgurl":"http://img.autohome.com.cn/album/images/2013/10/14/12090-c054-43eaee93.GIF","url":"http://club.autohome.com.cn/bbs/thread-c-3085-25494157-1.html"}]}
可以看出,该json字符串包括3个数据项目,数据项目的名称分别为:"returncode"、"message"和"result",数据项目的值的数据类型分别为:字符型、字符型和数组。并且,该数组包括多个元素,每个元素的数据类型为json,每个元素对应的json字符串中包括4个数据项目,数据项目的名称分别为"title"、"postdate"、"imgurl"和"url",数据项目的值的数据类型均为字符型。也就是说,从该接口获取到的json字符串为前述的嵌套结构。
然后,根据json数据区的json字符串,通过工具(json到类生产器)生成类的结构和初始化(Create)方法。图6示出了根据本发明一个实施例的json到类生产器的运行界面,参照图6,所述json到类生产器针对上述json字符串生成了两个类,分别为Base和ClubItem,所生成的Base类的结构如下:
可以看出,Base类具有3个属性,属性名称分别为returncode、message和result,属性的值的数据类型分别为:字符型、字符型和列表,且该列表是ClubItem对象的列表。Base类的初始化(create)方法中采用是与上述从接口获取到的json字符串对应的数据字典,且包括对ClubItem类的初始化方法的引用。
所生成的ClubItem类的结构如下:
可以看出,ClubItem类具有3个属性,属性名称分别为title、postdate、imgurl和url,属性的值的数据类型均为字符型。ClubItem类的初始化(create)方法中采用是与上述从接口获取到的json字符串中的数组的各元素对应的数据字典。
在生成了Base类和ClubItem类之后,将这两个类的代码拷贝到用于生成动态网页的.ascx.cs文件中,该.ascx.cs文件经编译后形成.dll文件,构建动态网页时,可以根据该.dll文件将来自服务器特定接口的json字符串转换为数据对象。
在构建动态网页时,可以按照如下步骤编写代码调用过程:
(1)获取到url;
(2)根据url得到json;
(3)获取到弱类型的字典数据;
(4)转换成强类型结构的数据对象。
其中,代码调用过程示例如下:
相比于之前的较复杂的一个JSON字符串反序列化需要15-20ms,根据上述应用实例,反序列化基本在2ms完成,而如果一个复杂的页面包含多个JSON反序列化的数据,则反序列化时间会减少30-50ms,这样,动态网页的响应时间整体减少了大约20%。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数值信号处理器(DSP)来实现根据本发明实施例的数据处理设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (8)
1.一种数据处理方法,包括:
从服务器的特定接口获取字符串,所述字符串具有预定数据格式,并包括一个或多个数据项目,每个数据项目包括数据项目的名称和相关联的值;
根据所述字符串生成数据处理器,所述数据处理器适于对所述字符串所具有的预定数据格式的数据进行处理以生成数据对象,该步骤包括:
根据所述字符串生成包括数据项目的名称和数据项目的值的关联关系的数据字典;
从所述数据字典中获取各个数据项目,并确定各个数据项目的值的数据类型,以每个数据项目的名称作为属性名称、相关联的值的数据类型作为属性的数据类型,构造成所述数据处理器要处理的数据对象的一个属性;
根据所述数据字典的结构与数据处理器要处理的数据对象的结构的对应关系,生成所述数据处理器对所述数据对象进行初始化的初始化方法,所述初始化方法适于根据所述数据字典为数据对象的每个属性赋予属性值;
以及
对于来自所述服务器的特定接口的目标字符串,利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象。
2.如权利要求1所述的数据处理方法,其中,所述利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象包括:
根据所述目标字符串生成包括数据项目的名称和数据项目的值的关联关系的目标数据字典;
利用所述数据处理器的初始化方法,根据所述目标数据字典为目标数据对象的每个属性赋予属性值,从而生成相对应的目标数据对象。
3.如权利要求2所述的数据处理方法,其中,所述预定数据格式为JSON,所述确定各个数据项目的值的数据类型包括:
当数据项目的值包括于双引号之内时,确定该数据项目的值的数据类型为字符型;
当数据项目的值为数字时,确定该数据项目的值的数据类型为数值型;
当数据项目的值为true或者false时,确定该数据项目的值的数据类型为逻辑型;
当数据项目的值包括于中括号之内时,确定该数据项目的值的数据类型为数组;
当数据项目的值包括于大括号之内时,确定该数据项目的值的数据类型为JSON。
4.如权利要求3所述的数据处理方法,其中:
当数据项目的值的数据类型为数组时,则所生成的数据处理器中与该数据项目对应的属性的数据类型为列表;
当数据项目的值或者所述数组的元素的数据类型为JSON时,则所生成的数据处理器中与该数据项目对应的属性或者所述列表的列表项的数据类型为对象,并且,所述数据处理方法还包括生成用于对相应JSON字符串中的数据进行处理以生成数据对象的第二数据处理器,以及,在所述数据处理器的初始化方法中还包括对所述第二数据处理器的初始化方法的引用。
5.一种数据处理设备,包括:
字符串获取器,适于从服务器的特定接口获取字符串,所述字符串具有预定数据格式,并包括一个或多个数据项目,每个数据项目包括数据项目的名称和相关联的值;
数据处理器构造器,适于根据所述字符串生成数据处理器,所述数据处理器适于对所述字符串所具有的预定数据格式的数据进行处理以生成数据对象,所述数据处理器构造器包括:
数据字典生成器,适于根据所述字符串生成包括数据项目的名称和数据项目的值的关联关系的数据字典;
属性构造器,适于从所述数据字典中获取各个数据项目,并确定各个数据项目的值的数据类型,以每个数据项目的名称作为属性名称、相关联的值的数据类型作为属性的数据类型,构造成所述数据处理器要处理的数据对象的一个属性;
方法构造器,适于根据所述数据字典的结构与数据处理器要处理的数据对象的结构的对应关系,生成所述数据处理器对所述数据对象进行初始化的初始化方法,所述初始化方法适于根据所述数据字典为数据对象的每个属性赋予属性值;
以及
数据对象生成器,适于对于来自所述服务器的特定接口的目标字符串,利用所述数据处理器将所述目标字符串处理成相对应的目标数据对象。
6.如权利要求5所述的数据处理设备,其中,所述数据对象生成器包括:
目标数据字典生成器,适于根据所述目标字符串生成包括数据项目的名称和数据项目的值的关联关系的目标数据字典;
方法执行器,适于利用所述数据处理器的初始化方法,根据所述目标数据字典为目标数据对象的每个属性赋予属性值,从而生成相对应的目标数据对象。
7.如权利要求6所述的数据处理设备,其中,所述预定数据格式为JSON,所述属性构造器按照如下方式确定各个数据项目的值的数据类型:
当数据项目的值包括于双引号之内时,确定该数据项目的值的数据类型为字符型;
当数据项目的值为数字时,确定该数据项目的值的数据类型为数值型;
当数据项目的值为true或者false时,确定该数据项目的值的数据类型为逻辑型;
当数据项目的值包括于中括号之内时,确定该数据项目的值的数据类型为数组;
当数据项目的值包括于大括号之内时,确定该数据项目的值的数据类型为JSON。
8.如权利要求7所述的数据处理设备,其中:
当数据项目的值的数据类型为数组时,则所述数据处理器构造器所生成的数据处理器中与该数据项目对应的属性的数据类型为列表;
当数据项目的值或者所述数组的元素的数据类型为JSON时,则所述数据处理器构造器所生成的数据处理器中与该数据项目对应的属性或者所述列表的列表项的数据类型为对象,并且,所述数据处理器构造器还进一步生成用于对相应JSON字符串中的数据进行处理以生成数据对象的第二数据处理器,以及,在所述数据处理器的初始化方法中添加对所述第二数据处理器的初始化方法的引用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410187386.1A CN103970855B (zh) | 2014-05-06 | 2014-05-06 | 一种数据处理设备和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410187386.1A CN103970855B (zh) | 2014-05-06 | 2014-05-06 | 一种数据处理设备和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103970855A CN103970855A (zh) | 2014-08-06 |
CN103970855B true CN103970855B (zh) | 2017-05-10 |
Family
ID=51240352
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410187386.1A Active CN103970855B (zh) | 2014-05-06 | 2014-05-06 | 一种数据处理设备和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103970855B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105468606B (zh) * | 2014-08-25 | 2020-02-04 | 小米科技有限责任公司 | 网页保存的方法及装置 |
CN105005592B (zh) * | 2015-06-29 | 2018-10-16 | 用友优普信息技术有限公司 | 数据字典生成方法和数据字典生成装置 |
CN106610922A (zh) * | 2015-10-26 | 2017-05-03 | 北京国双科技有限公司 | 反序列化方法及装置 |
CN105306587B (zh) * | 2015-11-13 | 2019-04-12 | 网易(杭州)网络有限公司 | 业务数据的处理方法、装置与系统 |
CN105739970B (zh) * | 2016-01-20 | 2019-09-20 | 北京京东尚科信息技术有限公司 | 数据映射为自定义类对象的方法和装置 |
CN106294701B (zh) * | 2016-08-08 | 2019-08-23 | 武汉斗鱼网络科技有限公司 | 网站前端的数据缓存系统及方法 |
US11537272B2 (en) * | 2016-12-21 | 2022-12-27 | Aon Global Operations Se, Singapore Branch | Content management system extensions |
CN109901989B (zh) * | 2017-12-11 | 2023-12-12 | 阿里巴巴(中国)有限公司 | Json对比方法和装置以及电子设备 |
CN108388423A (zh) * | 2018-02-26 | 2018-08-10 | 中车青岛四方机车车辆股份有限公司 | 一种ios数据对象转换方法及装置 |
CN109005469B (zh) * | 2018-07-03 | 2021-07-23 | 武汉斗鱼网络科技有限公司 | 一种消息格式的转换方法、装置、存储介质及安卓终端 |
CN110059153B (zh) * | 2019-03-29 | 2023-09-26 | 中国人民解放军63791部队 | 一种用于实时数据处理系统的数据交换方法 |
CN110263279B (zh) * | 2019-05-08 | 2021-08-10 | 北京字节跳动网络技术有限公司 | 页面生成方法、装置、电子设备和计算机可读存储介质 |
CN112989139B (zh) * | 2019-12-13 | 2023-10-27 | 北京国基科技股份有限公司 | 一种数据查找方法及装置 |
CN112130890A (zh) * | 2020-09-17 | 2020-12-25 | 北京金和网络股份有限公司 | 业务系统开发和维护方法、装置和存储介质及服务器 |
CN112783581A (zh) * | 2021-01-21 | 2021-05-11 | 上海哔哩哔哩科技有限公司 | 数据处理方法、装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103605518A (zh) * | 2013-11-19 | 2014-02-26 | 北京国双科技有限公司 | 对象反序列化方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9461817B2 (en) * | 2009-01-20 | 2016-10-04 | International Business Machines Corporation | Method and system for encrypting JavaScript object notation (JSON) messages |
CN102810069A (zh) * | 2012-07-16 | 2012-12-05 | 深圳市融创天下科技股份有限公司 | 一种java对象的请求和响应方法、装置、系统和终端 |
-
2014
- 2014-05-06 CN CN201410187386.1A patent/CN103970855B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103605518A (zh) * | 2013-11-19 | 2014-02-26 | 北京国双科技有限公司 | 对象反序列化方法和装置 |
Non-Patent Citations (1)
Title |
---|
"ASP.NET中JSON的序列化和反序列化";无风;《http://www.cnblogs.com/zhaozhan/archive/2011/01/09/1931340.html》;20110109;第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103970855A (zh) | 2014-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103970855B (zh) | 一种数据处理设备和方法 | |
CN109145078B (zh) | 对本机应用的应用页面建索引 | |
US7757177B1 (en) | Virtual forms | |
US9201672B1 (en) | Method and system for aggregation of search results | |
US20080010615A1 (en) | Generic frequency weighted visualization component | |
US20090006646A1 (en) | System and Method of Auto Populating Forms on Websites With Data From Central Database | |
US20070073697A1 (en) | System, Method, and Computer Program Product for Internet Tool | |
NZ566291A (en) | Methods and devices for post processing rendered web pages and handling requests of post processed web pages | |
WO2007078283A2 (en) | Distributed content exchange and presentation system | |
CN106095766A (zh) | 使用选择性重新讲话来校正话音识别 | |
CN101627381A (zh) | 交叉搜索结果 | |
US8799274B2 (en) | Topic map for navigation control | |
CN105009117B (zh) | 在线社交网络中的模糊结构化搜索查询 | |
CN112236773A (zh) | 移动数字页面中的安全通信 | |
CN102664874A (zh) | 一种安全登陆的方法和系统 | |
WO2007062026A2 (en) | Distributed content exchange and presentation system | |
CN104065736A (zh) | 一种url重定向方法、装置及系统 | |
US7631060B2 (en) | Identity system for use in a computing environment | |
US20130326037A1 (en) | Consistent association of a user id with a user | |
CN111339548A (zh) | 反爬虫的数据处理方法、浏览器、计算机设备及存储介质 | |
US20200380071A1 (en) | Autoform Filling Using Text from Optical Character Recognition and Metadata for Document Types | |
US9104777B2 (en) | Method for improving accessibility to rich internet applications through collaborative crawling and computer program for the same | |
CN104361094A (zh) | 搜索结果中文件的保存方法、装置和浏览器客户端 | |
CN110992131B (zh) | 一种表单处理方法、装置及存储介质 | |
CN104199862A (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 |