发明内容
本申请实施例提供了一种数据传输方法、装置及存储介质,可以解决服务器与浏览器应用无法通过传输第二数据格式的数据的协议进行通信的问题。所述技术方案如下:
一方面,提供了一种数据传输方法,应用于终端中安装的目标应用中,所述目标应用不为浏览器应用,所述方法包括:
获取所述终端中的浏览器应用发送的第一字符串,所述第一字符串的数据格式为第一数据格式;
将所述第一字符串转换为第二字符串,所述第二字符串的数据格式为第二数据格式;
向服务器发送所述第二字符串。
可选地,所述将所述第一字符串转换为第二字符串,包括:
根据所述第一字符串,生成目标对象,所述目标对象包括多个目标字段;
根据所述目标对象中的每个目标字段,生成所述第二字符串。
可选地,所述根据所述目标对象中的每个目标字段,生成所述第二字符串,包括:
创建第一消息体,所述第一消息体包括多个第一空字段,每个第一空字段对应一个字段标识;
根据所述目标对象中每个目标字段的字段标识,将每个目标字段包括的数据填充至与相应目标字段的字段标识相同的第一空字段中,得到填充后的第一消息体;
将填充后的第一消息体转换为所述第二字符串。
可选地,所述根据所述目标对象中每个目标字段的字段标识,将每个目标字段包括的数据填充至与相应目标字段的字段标识相同的空字段中,包括:
当第一目标字段中的数据为基础类型的数据时,将所述第一目标字段包括的数据写入所述第一消息体中与所述第一目标字段的字段标识相同的第一空字段中,所述第一目标字段为所述目标对象中的任一字段。
可选地,所述根据所述目标对象中每个目标字段的字段标识,将每个目标字段包括的数据填充至与相应目标字段的字段标识相同的第一空字段中,包括:
当第一目标字段中的数据为消息时,在与所述第一目标字段的字段标识相同的第一空字段中创建第二消息体,所述第二消息体包括多个第二空字段,所述第一目标字段为所述目标对象中的任一字段;
获取所述第一目标字段中的消息包括的多个子字段的字段标识;
根据所述多个子字段中每个子字段的字段标识,将每个子字段包括的数据填充至所述第二消息体中与相应子字段的字段标识相同的第二空字段中。
另一方面,提供了一种数据传输方法,应用于终端中安装的目标应用中,所述目标应用不为浏览器应用,所述方法包括:
接收服务器发送的第一字符串,所述第一字符串的数据格式为第二数据格式;
将所述第一字符串转换为第二字符串,所述第二字符串的数据格式为第一数据格式;
向所述终端中的浏览器应用发送所述第二字符串。
可选地,所述将所述第一字符串转换为第二字符串,包括:
根据所述第一字符串,生成目标对象,所述目标对象包括多个目标字段;
根据所述目标对象中的每个目标字段,生成所述第二字符串。
可选地,所述根据所述目标对象中的每个目标字段,生成所述第二字符串,包括:
创建第一根对象;
根据所述目标对象中的每个目标字段,在所述第一根对象下生成每个目标字段对应的子对象;
根据所述第一根对象和所述第一根对象下的多个子对象,生成所述第二字符串。
可选地,所述根据所述目标对象中的每个目标字段,在所述第一根对象下生成每个目标字段对应的子对象,包括:
当第一目标字段包括的数据为基础类型的数据时,根据所述第一目标字段在所述第一根对象下生成第一子对象,所述第一目标字段为所述目标对象中的任一目标字段;
当所述第一目标字段中的数据为消息时,根据所述第一目标字段在所述第一根对象下生成第二子对象,并以所述第二子对象为根对象生成多个第三子对象。
另一方面,提供了一种数据传输装置,所述装置包括:
获取模块,用于获取所述终端中的浏览器应用发送的第一字符串,所述第一字符串的数据格式为第一数据格式;
转换模块,用于将所述第一字符串转换为第二字符串,所述第二字符串的数据格式为第二数据格式;
发送模块,用于向服务器发送所述第二字符串。
可选地,所述转换模块包括:
第一生成子模块,用于根据所述第一字符串,生成目标对象,所述目标对象包括多个目标字段;
第二生成子模块,用于根据所述目标对象中的每个目标字段,生成所述第二字符串。
可选地,所述第二生成子模块具体用于:
创建第一消息体,所述第一消息体包括多个第一空字段,每个第一空字段对应一个字段标识;
根据所述目标对象中每个目标字段的字段标识,将每个目标字段包括的数据填充至与相应目标字段的字段标识相同的第一空字段中,得到填充后的第一消息体;
将填充后的第一消息体转换为所述第二字符串。
可选地,所述第二生成子模块具体用于:
当第一目标字段中的数据为基础类型的数据时,将所述第一目标字段包括的数据写入所述第一消息体中与所述第一目标字段的字段标识相同的第一空字段中,所述第一目标字段为所述目标对象中的任一字段。
可选地,所述第二生成子模块具体用于:
当第一目标字段中的数据为消息时,在与所述第一目标字段的字段标识相同的第一空字段中创建第二消息体,所述第二消息体包括多个第二空字段,所述第一目标字段为所述目标对象中的任一字段;
获取所述第一目标字段中的消息包括的多个子字段的字段标识;
根据所述多个子字段中每个子字段的字段标识,将每个子字段包括的数据填充至所述第二消息体中与相应子字段的字段标识相同的第二空字段中。
另一方面,提供了一种数据传输装置,所述装置包括:
接收模块,用于接收服务器发送的第一字符串,所述第一字符串的数据格式为第二数据格式;
转换模块,用于将所述第一字符串转换为第二字符串,所述第二字符串的数据格式为第一数据格式;
发送模块,用于向所述终端中的浏览器应用发送所述第二字符串。
可选地,所述转换模块包括:
第一生成子模块,用于根据所述第一字符串,生成目标对象,所述目标对象包括多个目标字段;
第二生成子模块,用于根据所述目标对象中的每个目标字段,生成所述第二字符串。
可选地,所述第二生成子模块具体用于:
创建第一根对象;
根据所述目标对象中的每个目标字段,在所述第一根对象下生成每个目标字段对应的子对象;
根据所述第一根对象和所述第一根对象下的多个子对象,生成所述第二字符串。
可选地,所述第二生成子模块具体用于:
当第一目标字段包括的数据为基础类型的数据时,根据所述第一目标字段在所述第一根对象下生成第一子对象,所述第一目标字段为所述目标对象中的任一目标字段;
当所述第一目标字段中的数据为消息时,根据所述第一目标字段在所述第一根对象下生成第二子对象,并以所述第二子对象为根对象生成多个第三子对象。
另一方面,提供了一种数据传输装置,所述数据传输装置包括处理器、通信接口、存储器和通信总线;
其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信;
所述存储器用于存放计算机程序;
所述处理器用于执行所述存储器上所存放的程序,以实现前述提供的数据传输方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现前述提供的数据传输方法的步骤。
本申请实施例提供的技术方案带来的有益效果至少包括:
在本申请实施例中,目标应用可以将浏览器应用发送的数据格式为第一数据格式的第一字符串转化为数据格式为第二数据格式的第二字符串,这样,就可以通过用于传输第二数据格式的数据的协议将第二字符串发送给服务器,避免了还需要在服务器中配置传输第一数据格式的数据的协议,减少了服务器的开销,且提高了协议处理的可读性和维护性。
具体实施方式
为使本申请示例性实施例的目的、技术方案和优点更加清楚,下面将结合本申请示例性实施例中的附图,对本申请示例性实施例中的技术方案进行清楚、完整地描述,显然,所描述的示例性实施例仅是本申请一部分实施例,而不是全部的实施例。
基于本申请中示出的示例性实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。此外,虽然本申请中公开内容按照示范性一个或几个实例来介绍,但应理解,可以就这些公开内容的各个方面也可以单独构成一个完整技术方案。
应当理解,本申请中说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,例如能够根据本申请实施例图示或描述中给出那些以外的顺序实施。
此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖但不排他的包含,例如,包含了一系列组件的产品或设备不必限于清楚地列出的那些组件,而是可包括没有清楚地列出的或对于这些产品或设备固有的其它组件。
本申请中使用的术语“模块”,是指任何已知或后来开发的硬件、软件、固件、人工智能、模糊逻辑或硬件或/和软件代码的组合,能够执行与该元件相关的功能。
在对本申请实施例进行详细的解释说明之前,先对本申请实施例涉及的应用场景予以介绍。
当前,服务器中通常配置有传输ProtocolBuff数据格式的数据的协议,以通过该协议与终端之间传输ProtocolBuff数据格式的数据。然而终端中的浏览器应用所使用的数据格式为json数据格式,在这种情况下,即可以通过本申请实施例提供的数据传输方法,将浏览器应用发送的json格式的字符串ProtocolBuff格式的字符串,再将ProtocolBuff格式的字符串发送至服务器,或者是,将服务器发送的ProtocolBuff格式的字符串转换为json格式的字符串,再将json格式的字符串发送至浏览器应用,以此实现浏览器应用和服务器之间的数据传输。
接下来对本申请实施例提供的数据传输方法所涉及的系统架构进行介绍。
图1是本申请实施例提供的一种数据传输方法所涉及的系统架构图。如图1所示,该系统100包括终端101和服务器102。终端101和服务器102之间通过无线或有线方式连接以进行通信。
其中,终端101上安装有浏览器应用和目标应用,该浏览器应用可以提供一个搜索栏,以供用户进行搜索,且浏览器应用使用的数据格式为第一数据格式。该目标应用可以将第一数据格式和第二数据格式进行转化。
在一些实施例中,终端101上的浏览器应用可以根据数据格式为第一数据格式的第一字符串生成数据包,并将该数据包发送至目标应用。之后,目标应用可以获取浏览器应用发送的数据包,并从数据包中获取第一字符串,将第一字符串转化为数据格式为第二数据格式的第二字符串,进而将第二字符串发送至服务器102。
服务器102可以接收终端101发送的第二字符串,且第二字符串的数据格式为第二数据格式。
在另一些实施例中,服务器102可以将数据格式为第二数据格式的第三字符串发送至终端101。
终端101可以通过目标应用接收服务器102发送的数据格式为第二数据格式的第三字符串,之后,目标应用可以将第三字符串转换为数据格式为第一数据格式的第四字符串,并将第四字符串发送至浏览器应用。
需要说明的是,终端101可以为电脑、智能手机等设备,图1中仅仅是以电脑举例进行说明,并不构成对本申请实施例的限定。服务器102可以是一台服务器或者一个服务器集群。
接下来对本申请实施例提供的数据传输方法进行介绍。
图2是本申请实施例提供的一种数据传输方法的流程图,该方法应用于终端中安装的目标应用中,该终端可以为图1中的终端101。如图2所示,该方法包括以下步骤:
步骤201:获取终端中的浏览器应用发送的第一字符串,第一字符串的数据格式为第一数据格式。
需要说明的是,终端中安装有目标应用和浏览器应用。其中,目标应用可以将第一数据格式和第二数据格式进行转换,且目标应用为客户端应用,而不为浏览器应用。浏览器应用可以提供一个搜索栏,以使用户在搜索栏中进行搜索,并且浏览器应用使用的数据的数据格式为第一数据格式,示例性地,第一数据格式可以为json数据格式,第二数据格式可以为ProtocolBuff数据格式。
需要说明的是,浏览器应用可以根据第一字符串生成数据包,并将该数据包发送至目标应用。目标应用接收到数据包之后,可以从数据包中获取第一字符串。
作为一种示例,终端上可以提供一个第一接口,该第一接口用于浏览器应用和目标应用之间进行数据传输。在这种情况下,浏览器应用根据第一字符串生成数据包后,可以通过第一接口将数据包发送至目标应用。目标应用接收到数据包后,可以从数据包中获取第一字符串。
步骤202:将第一字符串转换为第二字符串,第二字符串的数据格式为第二数据格式。
在本申请实施例中,目标应用可以根据第一字符串,生成目标对象,目标对象包括多个目标字段。之后,可以根据目标对象中的每个目标字段,生成第二字符串。
需要说明的是,第一字符串是一个完整的字符串,并没有进行字段的划分,将第一字符串转化为目标对象后,目标对象中包括多个目标字段,且每个目标字段对应有字段标识。之后,可以通过字段标识获取该字段标识所标识的字段包括的数据。
示例性地,目标应用可以通过调用函数库,将第一字符串转化为目标对象。例如,第一字符串的数据格式为joson数据格式时,目标应用可以调用json函数库,将第一字符串转换为目标对象。
目标应用得到目标对象之后,可以创建第一消息体,第一消息体包括多个第一空字段,每个第一空字段对应一个字段标识;之后,可以根据目标对象中每个目标字段的字段标识,将每个目标字段包括的数据填充至与相应目标字段的字段标识相同的第一空字段中,得到填充后的第一消息体,再将填充后的第一消息体转换为第二字符串。
作为一种示例,目标应用可以获取消息体模板,进而根据该消息体模板创建第一消息体。
需要说明的是,目标应用接收到浏览器发送的数据包之后,还可以从数据包中获取消息全类名,并根据消息全类名生成消息体原型描述。其中,消息全类名为数据包包括的包名和类名,该消息体原型描述用于描述消息体的类型、消息体的结构,消息体包括的字段等等。之后,目标应用可以根据消息体原型描生成消息体模板,消息体模板包括多个字段,以及每个字段对应的字段标识。生成消息体模板之后,目标应用可以根据消息体模板创建第一消息体,第一消息体包括多个第一空字段,且该多个第一空字段与消息体模板中包括的多个字段相同。
示例性地,目标应用可以将数据包的消息全类名作为参数,调用FindMessageTypeByName(const string&name)函数,从而得到消息体原型描述pDescriptor,之后,目标应用可以将消息体原型描述pDescriptor作为参数,调用GetPrototype(const Descriptor*type)函数,生成消息体模板pMessagePrototype。之后,目标应用可以调用New()函数,根据消息体模板pMessagePrototype创建第一消息体pMessage。
目标应用创建第一消息体之后,可以获取第一目标字段的字段标识,并根据字段标识确定第一消息体中与第一目标字段的字段标识相同的第一空字段,第一目标字段为目标对象中的任一字段。
作为一种示例,目标应用可以获取第一消息体的消息体描述,根据第一消息体的消息体描述得到第一消息体的消息体字段描述,并获取第一消息体的字段接口。其中,消息体描述用于描述第一消息体,可以包括第一消息体的消息体类型和消息体标识,消息体字段描述用于描述第一消息体的多个第一空字段,可以包括每个第一空字段的字段类型、字段标识和字段是否可选,字段接口用于向每个第一空字段中写入数据。
示例性地,目标应用可以通过调用GetDescriptor()函数,根据pMessage得到第一消息体的消息体描述pDescriptor,之后,可以通过调用FindFieldByName(key)函数,根据消息体描述pDescriptor得到第一消息体的消息体字段描述pFieldDescriptor。并且,还可以通过调用GetReflection()函数,根据pMessage得到第一消息体的字段接口pReflection。
目标应用可以将第一目标字段的字段标识与消息体字段描述中包括的多个第一空字段的字段标识进行比较,从而确定第一消息体中与第一目标字段的字段标识相同的第一空字段。
目标应用确定与第一目标字段的字段标识相同的第一空字段之后,可以获取第一目标字段的数据的数据类型,进而根据第一目标字段的数据的数据类型,将第一目标字段包括的数据填充至与第一目标字段的字段标识相同的第一空字段中。
在一种可能的情况下,当第一目标字段中的数据为基础类型的数据时,目标应用可以将第一目标字段包括的数据写入第一消息体中与第一目标字段的字段标识相同的第一空字段中。
当第一目标字段中的数据为基础类型时,目标应用可以获取第一目标字段的重复标识,该重复标识用于指示第一目标字段的数据是否重复。当第一目标字段的重复标识用于标识重复时,说明第一目标字段中的数据为数组。在这种情况下,目标应用可以通过字段接口调用增加函数,将第一目标字段包括的数据写入第一消息体中与第一目标字段的字段标识相同的第一空字段中。
其中,基础类型可以包括数字、字符串以及布尔型变量等。
示例性地,目标应用可以通过调用字段接口pReflection中的AddInt32,AddUInt32,AddInt64,AddUInt64,AddDouble,AddFloat,AddBool或AddString函数将第一目标字段包括的数据,也即是数组写入第一消息体中与第一目标字段的字段标识相同的第一空字段中。
当第一目标字段的重复标识用于标识不重复时,说明第一目标字段中的数据为数值。在这种情况下,目标应用可以通过字段接口调用写入函数,将第一目标字段包括的数据写入第一消息体中与第一目标字段的字段标识相同的第一空字段中。
示例性地,目标应用可以通过调用字段接口pReflection中的SetInt32,SetUInt32,SetInt64,SetUInt64,SetDouble,SetFloat或SetString函数将第一目标字段包括的数据,也即是数值写入第一消息体中与第一目标字段的字段标识相同的第一空字段中。
在另一种可能的情况下,当第一目标字段中的数据为消息时,目标应用可以在与第一目标字段的字段标识相同的第一空字段中创建第二消息体,第二消息体包括多个第二空字段,第一目标字段为目标对象中的任一字段。之后,可以获取第一目标字段中的消息包括的多个子字段的字段标识。进而根据多个子字段中每个子字段的字段标识,将每个子字段包括的数据填充至第二消息体中与相应子字段的字段标识相同的第二空字段中。
当第一目标字段中的数据为消息时,目标应用可以获取第一目标字段的重复标识。当第一目标字段的重复标识用于标识重复时,说明第一目标字段中的数据为多个消息。在这种情况下,目标应用可以通过字段接口调用增加消息函数,创建多个第二消息体。
示例性地,目标应用可以通过调用Reflection::AddMessage函数,根据pReflection创建多个第二消息体pMessage。
创建多个第二消息体之后,针对其中一个第二消息体来说,目标应用可以获取第一目标字段中包括的一个消息的多个子字段的字段标识,并生成第二消息体的消息体描述、消息体字段描述以及字段接口。之后,可以根据多个子字段的字段标识、第二消息体的消息体描述、消息体字段描述以及字段接口,将该消息的多个子字段包括的数据写入第二消息体中与每个子字段的字段标识相同的第二空字段中。其中,将该消息的多个子字段包括的数据写入第二消息体中与每个子字段的字段标识相同的第二空字段中的具体实现方法,可以参考前述将目标字段包括的数据写入第一消息体中与目标字段的字段标识相同的第一空字段中的实现方法,在此不再赘述。
当第一目标字段的重复标识用于标识不重复时,说明第一目标字段中的数据为一个消息。在这种情况下,目标应用可以通过字段接口调用创建消息函数,创建一个第二消息体。
示例性地,目标应用可以通过调用Reflection::MutableMessage函数,根据pReflection创建一个第二消息体pMessage。
创建第二消息体之后,可以将第一目标字段包括的消息中的每个子字段包括的数据填充至第二消息体中与相应子字段的字段标识相同的第二空字段中。其中,具体的实现方式可以参考前述的实现方式,在此不再赘述。
对于目标对象中的每个目标字段,目标应用均可以参考上述方法将相应目标字段包括的数据填充至与该目标字段的字段标识相同的第一空字段,从而得到填充后的第一消息体。此时,目标应用可以调用转换函数,将填充后的第一消息体转换为第二字符串。
示例性地,目标应用得到填充后的第一消息体后,可以通过调用SerializeAsString函数,将第一消息体转成第二字符串。
步骤203:向服务器发送第二字符串。
目标应用得到第二字符串之后,由于第二字符串的数据格式为第二数据格式,因此,可以通过传输第二数据格式的数据的协议将第二字符串发送至服务器。
作为一种示例,终端上可以提供一个第二接口,该第二接口用于服务器和目标应用之间进行数据传输。在这种情况下,目标应用将数据格式为第一数据格式的第一字符串转换为数据格式为第二数据格式的第二字符串之后,可以通过第二接口将第二字符串发送至服务器。
在本申请实施例中,在浏览器应用使用的数据格式为第一数据格式,服务器使用的数据格式为第二数据格式的情况下,目标应用可以将浏览器应用发送的数据格式为第一数据格式的第一字符串转化为数据格式为第二数据格式的第二字符串,这样,就可以通过用于传输第二数据格式的数据的协议将第二字符串发送给服务器,避免了还需要在服务器中配置传输第一数据格式的数据的协议,减少了服务器的开销,且提高了协议处理的可读性和维护性。
前述实施例中以浏览器应用向服务器传输数据为例介绍了数据传输方法的实现过程,接下来,将以服务器向浏览器应用传输数据为例来介绍该数据传输方法的实现过程。
图3是本申请实施例提供的一种数据传输方法的流程图,该方法应用于终端中安装的目标应用中,该终端可以为图1中的终端101。如图3所示,该方法包括以下步骤:
步骤301:接收服务器发送的第一字符串,第一字符串的数据格式为第二数据格式。
需要说明的是,服务器中配置有用于传输第二数据格式的数据的协议。这样,服务器可以通过该协议将数据格式为第二数据格式的第一字符串发送至终端中。
作为一种示例,终端上可以提供一个第一接口,该第一接口用于服务器和目标应用之间进行数据传输。在这种情况下,终端上的目标应用可以通过第一接口接收到服务器发送的第一字符串。
步骤302:将第一字符串转换为第二字符串,第二字符串的数据格式为第一数据格式。
在本申请实施例中,目标应用接收到第一字符串之后,可以根据第一字符串,生成目标对象,该目标对象包括多个目标字段,之后,可以根据目标对象中的每个目标字段,生成第二字符串。
需要说明的是,第一字符串是一个完整的字符串,并没有进行字段的划分,将第一字符串转化为目标对象后,目标对象中包括多个目标字段,且每个目标字段对应有字段标识。之后,可以通过字段标识获取该字段标识所标识的字段包括的数据。
作为一种示例,目标应用可以生成消息体描述原型和消息体模板,并通过消息体模板生成消息体,该消息体为第一字符串所对应的消息体,其中,具体的实现方式可以参考前述实施例步骤202中的实现方式,在此不再赘述。之后,目标应用可以调用函数,以根据该消息体将第一字符串转化为目标对象。
示例性地,目标应用可以通过调用ParseFromString函数,以根据消息体将第一字符串转换为目标对象。
目标应用将第一字符串转换为目标对象之后,可以获取目标对象包括的多个目标字段中每个目标字段对应的字段标识和字段类型。其中,可以通过调用函数获取消息体的消息体描述,再调用函数根据消息体描述获取消息体字段描述,消息体描述可以包括消息体的消息体类型和消息体标识,消息体字段描述可以包括每个目标字段的字段类型、字段标识和字段是否可选。可选地,目标应用还可以调用函数获取消息体的字段接口,字段接口用于向每个子对象中写入数据。其中,具体的实现方式可以参考前述实施例步骤202中的实现方式,在此不再赘述。
目标应用确定目标对象中的多个目标字段之后,可以创建第一根对象,并根据目标对象中的每个目标字段,在第一根对象下生成每个目标字段对应的子对象。之后,可以根据第一根对象和第一根对象下的多个子对象,生成第二字符串。
示例性地,目标应用可以通过调用函数库创建第一根对象。例如,当第二数据格式为json数据格式时,目标应用可以通过调用json库创建第一根对象。
目标应用创建第一根对象之后,可以获取第一目标字段的数据的数据类型,进而根据第一目标字段的数据的数据类型,生成第一根对象下的子对象,其中,第一目标字段为目标对象中的任一字段。
在一种可能的情况下,当第一目标字段包括的数据为基础类型的数据时,目标应用可以根据第一目标字段在第一根对象下生成第一子对象。
当第一目标字段中的数据为基础类型时,目标应用可以获取第一目标字段的重复标识,该重复标识用于指示第一目标字段的数据是否重复。当第一目标字段的重复标识用于标识重复时,说明第一目标字段中的数据为数组。在这种情况下,目标应用可以在第一根对象下创建数组类型的第一子对象。之后,目标应用可以通过字段接口调用数组写入函数,将第一目标字段包括的数据写入第一子对象中,并将第一目标字段的字段标识作为第一子对象的标识。
示例性地,目标应用可以通过在字段接口pReflection中调用GetRepeatedInt32,GetRepeatedUInt32,GetRepeatedInt64,GetRepeatedUInt64,GetRepeatedDoubl,GetRepeatedFloat,GetRepeatedBool或GetRepeatedStringReference函数,将第一目标字段的包括的数据写入第一子对象jsonArray中。
当第一目标字段的重复标识用于标识不重复时,说明第一目标字段中的数据为数值。在这种情况下,目标应用可以在第一根对象下创建数值类型的第一子对象。之后,目标应用可以通过字段接口调用数值写入函数,将第一目标字段包括的数据写入第一子对象中,并将第一目标字段的字段标识作为第一子对象的标识。
示例性地,目标应用可以通过在字段接口pReflection中调用GetInt32,GetUInt32,GetInt64,GetUInt64,GetDouble或GetFloat,GetString函数,将第一目标字段的包括的数据写入第一子对象jsonObj中。
在另一种可能的情况下,当第一目标字段中的数据为消息时,目标应用可以根据第一目标字段在第一根对象下生成第二子对象,并以第二子对象为根对象,在第二子对象下生成多个第三子对象。
当第一目标字段中的数据为消息时,目标应用可以获取第一目标字段的重复标识。当第一目标字段的重复标识用于标识重复时,说明第一目标字段中的数据为多个消息。在这种情况下,目标应用可以通过字段接口调用增加消息函数,创建该多个消息对应的多个消息体,并参考前述的方法获取每个消息体的消息体字段描述,以得到每个消息体包括的多个字段的字段标识和字段类型。之后,可以在第一根对象下创建多个数组类型的第二子对象,并将多个第二子对象分别作为多个消息体对应的根对象。接下来,可以根据每个消息体包括的多个字段的字段类型和字段标识,在每个第二子对象下生成第三子对象。其中,在第二子对象下生成第三子对象的具体实现方法可以参考前述在第一根对象下生成第一子对象的实现方法,在此不再赘述。
当第一目标字段的重复标识用于标识不重复时,说明第一目标字段中的数据为一个消息。在这种情况下,目标应用可以通过字段接口调用创建消息函数,创建一个消息体,并在第一根对象下创建一个数值类型的第二子对象。之后,可以第二子对象作为该消息对应的根对象,在第二子对象下生成第三子对象。其中,在第二子对象下生成第三子对象的具体实现方法可以参考前述在第一根对象下生成第一子对象的实现方法,在此不再赘述。
目标应用根据目标对象中的每个目标字段在第一根对象下生成多个子对象之后,可以根据第一根对象和第一根对象下的多个子对象,生成第二字符串。示例性地,目标应用可以通过函数库,将第一根对象和第一根对象下的多个子对象所组成的树状数据结构转换为第二字符串。
步骤303:向终端中的浏览器应用发送第二字符串。
目标应用得到第二字符串之后,由于第二字符串的数据格式为第一数据格式,因此,可以通过将第二字符串发送给浏览器应用,以使浏览器应用处理第二字符串。
作为一种示例,终端上可以提供一个第二接口,该第二接口用于浏览器应用和目标应用之间进行数据传输。在这种情况下,目标应用得到第二字符串之后,可以通过第二接口将第二字符串发送至浏览器应用。
在本申请实施例中,在浏览器应用使用的数据格式为第一数据格式,服务器使用的数据格式为第二数据格式的情况下,目标应用可以将服务器发送的数据格式为第二数据格式的第二字符串转化为数据格式为第一数据格式的第一字符串,这样,就使得浏览器应用可以处理通过传输第二数据格式的数据的协议接收到的服务器发送的第二字符串,从而避免了在服务器中配置传输第一数据格式的数据的协议,减少了服务器的开销,且提高了协议处理的可读性和维护性。
参见图4,本申请实施例提供了一种数据传输装置400,该装置400包括:
获取模块401,用于获取终端中的浏览器应用发送的第一字符串,第一字符串的数据格式为第一数据格式;
转换模块402,用于将第一字符串转换为第二字符串,第二字符串的数据格式为第二数据格式;
发送模块403,用于向服务器发送第二字符串。
可选地,转换模块402包括:
第一生成子模块,用于根据第一字符串,生成目标对象,目标对象包括多个目标字段;
第二生成子模块,用于根据目标对象中的每个目标字段,生成第二字符串。
可选地,第二生成子模块具体用于:
创建第一消息体,第一消息体包括多个第一空字段,每个第一空字段对应一个字段标识;
根据目标对象中每个目标字段的字段标识,将每个目标字段包括的数据填充至与相应目标字段的字段标识相同的第一空字段中,得到填充后的第一消息体;
将填充后的第一消息体转换为第二字符串。
可选地,第二生成模块具体用于:
当第一目标字段中的数据为基础类型的数据时,将第一目标字段包括的数据写入第一消息体中与第一目标字段的字段标识相同的第一空字段中,第一目标字段为目标对象中的任一字段。
可选地,第二生成子模块具体用于:
当第一目标字段中的数据为消息时,在与第一目标字段的字段标识相同的第一空字段中创建第二消息体,第二消息体包括多个第二空字段,第一目标字段为目标对象中的任一字段;
获取第一目标字段中的消息包括的多个子字段的字段标识;
根据多个子字段中每个子字段的字段标识,将每个子字段包括的数据填充至第二消息体中与相应子字段的字段标识相同的第二空字段中。
综上所述,在本申请实施例中,由于第一数据格式为浏览器应用使用的数据格式,第二数据格式为服务器使用的数据格式,而目标应用可以将浏览器应用发送的数据格式为第一数据格式的第一字符串转化为数据格式为第二数据格式的第二字符串,这样,就可以通过用于传输第二数据格式的数据的协议将第二字符串发送给服务器,避免了还需要在服务器中配置传输第一数据格式的数据的协议,减少了服务器的开销,且提高了协议处理的可读性和维护性。
参见图5,本申请实施例提供了一种数据传输装置500,该装置500包括:
接收模块501,用于接收服务器发送的第一字符串,第一字符串的数据格式为第二数据格式;
转换模块502,用于将第一字符串转换为第二字符串,第二字符串的数据格式为第一数据格式;
发送模块503,用于向终端中的浏览器应用发送第二字符串。
可选地,转换模块502包括:
第一生成子模块,用于根据第一字符串,生成目标对象,目标对象包括多个目标字段;
第二生成子模块,用于根据目标对象中的每个目标字段,生成第二字符串。
可选地,第二生成子模块具体用于:
创建第一根对象;
根据目标对象中的每个目标字段,在第一根对象下生成每个目标字段对应的子对象;
根据第一根对象和第一根对象下的多个子对象,生成第二字符串。
可选地,第二生成子模块具体用于:
当第一目标字段包括的数据为基础类型的数据时,根据第一目标字段在第一根对象下生成第一子对象,第一目标字段为目标对象中的任一目标字段;
当所述第一目标字段中的数据为消息时,根据第一目标字段在第一根对象下生成第二子对象,并以第二子对象为根对象生成多个第三子对象。
综上所述,在本申请实施例中,由于第一数据格式为浏览器应用使用的数据格式,第二数据格式为服务器使用的数据格式,而目标应用可以将服务器发送的数据格式为第二数据格式的第二字符串转化为数据格式为第一数据格式的第一字符串,这样,就使得浏览器应用可以处理通过传输第二数据格式的数据的协议接收到的服务器发送的第二字符串,从而避免了在服务器中配置传输第一数据格式的数据的协议,减少了服务器的开销,且提高了协议处理的可读性和维护性。
需要说明的是:上述实施例提供的数据传输装置在传输数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据传输装置与数据传输方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图6是根据一示例性实施例示出的一种数据传输终端600的结构框图。其中,该终端600可以是笔记本电脑、台式电脑等。
通常,终端600包括有:处理器601和存储器602。
处理器601可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器601可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器601也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器601可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器601还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器602可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器602还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器602中的非暂态的计算机可读存储介质用于存储至少一个指令,其中,该至少一个指令用于被处理器601所执行以实现本申请中方法实施例提供的数据传输方法。
在一些实施例中,终端600还可选包括有:外围设备接口603和至少一个外围设备。处理器601、存储器602和外围设备接口603之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口603相连。具体地,外围设备包括:射频电路604、显示屏605、摄像头组件606、音频电路607、定位组件608和电源609中的至少一种。
外围设备接口603可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器601和存储器602。在一些实施例中,处理器601、存储器602和外围设备接口603被集成在同一芯片或电路板上;在一些其他实施例中,处理器601、存储器602和外围设备接口603中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路604用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路604通过电磁信号与通信网络以及其他通信设备进行通信。射频电路604将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路604包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路604可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路604还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏605用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏605是触摸显示屏时,显示屏605还具有采集在显示屏605的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器601进行处理。此时,显示屏605还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏605可以为一个,设置终端600的前面板;在另一些实施例中,显示屏605可以为至少两个,分别设置在终端600的不同表面或呈折叠设计;在再一些实施例中,显示屏605可以是柔性显示屏,设置在终端600的弯曲表面上或折叠面上。甚至,显示屏605还可以设置成非矩形的不规则图形,也即异形屏。显示屏605可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。需要说明的是,在本申请实施例中,当该终端600为横屏终端时,该终端600的显示屏的宽高比大于1,例如,该终端600的显示屏的宽高比可以为16:9或4:3。当该终端600为竖屏终端时,则该终端600的显示屏的宽高比小于1,例如,该终端600的显示屏的宽高比可以为9:18或3:4等。
摄像头组件606用于采集图像或视频。可选地,摄像头组件606包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件606还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路607可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器601进行处理,或者输入至射频电路604以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端600的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器601或射频电路604的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路607还可以包括耳机插孔。
定位组件608用于定位终端600的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件608可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或欧盟的伽利略系统的定位组件。
电源609用于为终端600中的各个组件进行供电。电源609可以是交流电、直流电、一次性电池或可充电电池。当电源609包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端600还包括有一个或多个传感器610。该一个或多个传感器610包括但不限于:加速度传感器611、陀螺仪传感器612、压力传感器613、指纹传感器614、光学传感器615以及接近传感器616。
加速度传感器611可以检测以终端600建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器611可以用于检测重力加速度在三个坐标轴上的分量。处理器601可以根据加速度传感器611采集的重力加速度信号,控制显示屏605以横向视图或纵向视图进行用户界面的显示。加速度传感器411还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器612可以检测终端600的机体方向及转动角度,陀螺仪传感器612可以与加速度传感器611协同采集用户对终端600的3D动作。处理器601根据陀螺仪传感器612采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器613可以设置在终端600的侧边框和/或显示屏605的下层。当压力传感器613设置在终端600的侧边框时,可以检测用户对终端600的握持信号,由处理器601根据压力传感器613采集的握持信号进行左右手识别或快捷操作。当压力传感器613设置在显示屏605的下层时,由处理器601根据用户对显示屏605的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器614用于采集用户的指纹,由处理器601根据指纹传感器614采集到的指纹识别用户的身份,或者,由指纹传感器614根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器601授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器614可以被设置终端600的正面、背面或侧面。当终端600上设置有物理按键或厂商Logo时,指纹传感器614可以与物理按键或厂商Logo集成在一起。
光学传感器615用于采集环境光强度。在一个实施例中,处理器601可以根据光学传感器615采集的环境光强度,控制显示屏605的显示亮度。具体地,当环境光强度较高时,调高显示屏605的显示亮度;当环境光强度较低时,调低显示屏605的显示亮度。在另一个实施例中,处理器601还可以根据光学传感器615采集的环境光强度,动态调整摄像头组件606的拍摄参数。
接近传感器616,也称距离传感器,通常设置在终端600的前面板。接近传感器616用于采集用户与终端600的正面之间的距离。在一个实施例中,当接近传感器616检测到用户与终端600的正面之间的距离逐渐变小时,由处理器601控制显示屏605从亮屏状态切换为息屏状态;当接近传感器416检测到用户与终端600的正面之间的距离逐渐变大时,由处理器601控制显示屏605从息屏状态切换为亮屏状态。
也即是,本申请实施例不仅提供了一种终端,包括处理器和用于存储处理器可执行指令的存储器,其中,处理器被配置为执行图2或图3所示的数据传输方法,而且,本申请实施例还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,该计算机程序被处理器执行时可以实现图2或图3所示的数据传输方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述图2或图3所示实施例提供的数据传输方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。