CN103970737B - 一种数据构造方法和装置 - Google Patents
一种数据构造方法和装置 Download PDFInfo
- Publication number
- CN103970737B CN103970737B CN201310027270.7A CN201310027270A CN103970737B CN 103970737 B CN103970737 B CN 103970737B CN 201310027270 A CN201310027270 A CN 201310027270A CN 103970737 B CN103970737 B CN 103970737B
- Authority
- CN
- China
- Prior art keywords
- data
- specified message
- web page
- protobuf
- user
- 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/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
- G06F16/986—Document structures and storage, e.g. HTML extensions
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种数据构造方法和装置,属于网络通信领域。方法包括:对用户上传的Proto文件进行编译,得到与用户预设的指定消息名称对应的指定消息结构;生成与指定消息结构对应的Web页面,将指定消息的数据填充到Web页面中生成Web页面数据;将Web页面数据转化为Json格式数据;根据Json格式数据,创建指定消息对象;对指定消息对象进行序列化,得到指定消息的ProtoBuf数据文件。本发明解决了Protobuf数据的构造代价比较大数据准确性差、Protobuf数据的复用率低以及对使用人员技术要求高的问题,简化数据构造的过程,降低对使用者技术的要求,提高数据构造的效率以及数据的复用性和准确性。
Description
技术领域
本发明涉及网络通信领域,特别涉及一种数据构造方法和装置。
背景技术
Protobuf(Protocol Buffers),是Google公司开发的一种数据描述语言,能够将结构化数据序列化,可用于数据存储、通信协议等方面,由于Protobuf出色的性能和很好的扩展性而得到广泛应用。但是,Protobuf格式的数据构造却是复杂的过程。
目前,Protobuf数据构造方式一般是首先获取到Protobuf的定义文件proto文件,然后利用Google提供的Protoc编译器对proto文件编译并生成的特定语言的数据访问类文件(.Java或.cc或.py),然后在程序中将数据访问类文件包含进去,利用数据访问类文件中的代码接口进行Protobuf数据的构造以及解析。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
首先,随着业务的不断扩展和完善,Protobuf的定义文件通常会被一次有一次的重写,并且结构的复杂性和嵌套层次也在不断的增加,这就导致整个数据的构造过程非常繁琐和缓慢,Protobuf数据的构造代价比较大,数据准确性差;
然后,一次性构造的数据在后续的过程中不能重复使用,或者每次对上次数据修改后都要重新编译使用,过程重复且Protobuf数据的复用率低;
最后,由于目前Protobuf格式提供C++,Java和Python三种语言接口,使用人员除了需要了解Protobuf的特点和构造方式,还需要至少熟悉C++,Java,Python中的一种编程语言,对Protobuf使用人员的技术要求较高。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种数据构造方法和装置。所述技术方案如下:
一方面,提供了一种数据构造方法,所述方法包括:
对用户上传的Proto文件进行编译,得到与用户预设的指定消息名称对应的指定消息结构;所述Proto文件为ProtoBuf数据的定义文件;
生成与所述指定消息结构对应的Web页面,将所述指定消息的数据填充到所述Web页面中生成Web页面数据;
将所述Web页面数据转化为Json格式数据;
根据所述Json格式数据,创建指定消息对象;
对所述指定消息对象进行序列化,得到所述指定消息的ProtoBuf数据文件。
具体地,所述得到所述指定消息的ProtoBuf数据文件之后,还包括:
对所述Proto文件进行编译得到ProtoBuf数据的消息结构,并根据所述指定消息名称获取对应的指定消息结构;
对所述指定消息的ProtoBuf数据文件进行反序列化,得到所述指定消息对象;
根据所述指定消息对象,获取对应的所述Json格式数据;
将所述Json格式数据填充到所述Web页面,进行转化得到所述Web页面数据。
进一步地,所述将所述Json格式数据填充到所述Web页面,进行转化得到所述Web页面数据之后,包括:
获取用户在所述Web页面的操作,根据所述操作对所述Web页面数据进行编辑;所述编辑至少包括修改、删除、增加、隐藏以及展示。
具体地,所述对用户上传的Proto文件进行编译之前,包括:
获取用户上传的Proto文件以及用户预定的所述指定消息名称和所述指定消息的数据。
具体地,所述对用户上传的Proto文件进行编译,得到用户预设的指定消息名称对应的指定消息结构,包括:
对用户上传的Proto文件进行编译,得到ProtoBuf数据的消息结构;
在所述ProtoBuf数据的消息结构中查找与用户预设的指定消息名称对应的指定消息结构。
另一方面,提供了一种数据构造装置,所述装置包括:
第一编译模块,用于对用户上传的Proto文件进行编译,得到与用户预设的指定消息名称对应的指定消息结构;所述Proto文件为ProtoBuf数据的定义文件;
第一Web生成模块,用于生成与所述指定消息结构对应的Web页面,将所述指定消息的数据填充到所述Web页面中生成Web页面数据;
第一Json转化模块,用于将所述Web页面数据转化为Json格式数据;
第一对象生成模块,用于根据所述Json格式数据,创建指定消息对象;
ProtoBuf数据生成模块,用于对所述指定消息对象进行序列化,得到所述指定消息的ProtoBuf数据文件。
具体地,所述装置还包括:
第二编译模块,用于所述ProtoBuf数据生成模块得到所述指定消息的ProtoBuf数据文件之后,对所述Proto文件进行编译得到ProtoBuf数据的消息结构,并根据所述指定消息名称获取对应的指定消息结构;
第二对象生成模块,用于对所述指定消息的ProtoBuf数据文件进行反序列化,得到所述指定消息对象;
第二Json转化模块,用于根据所述指定消息对象,获取对应的所述Json格式数据;
第二Web生成模块,用于将所述Json格式数据填充到所述Web页面,进行转化得到所述Web页面数据。
进一步地,所述装置还包括:
编辑模块,用于所述第二Web生成模块进行转化得到所述Web页面数据之后,获取用户在所述Web页面的操作,根据所述操作对所述Web页面数据进行编辑;所述编辑至少包括修改、删除、增加、隐藏以及展示。
具体地,所述装置包括:
获取模块,用于所述第一编译模块Proto文件进行编译之前,获取用户上传的Proto文件以及用户预定的所述指定消息名称和所述指定消息的数据。
具体地,所述第一编译模块,包括:
编译单元,用于对用户上传的Proto文件进行编译,得到ProtoBuf数据的消息结构;
查找单元,用于在所述ProtoBuf数据的消息结构中查找与用户预设的指定消息名称对应的指定消息结构。
本发明实施例提供的技术方案带来的有益效果是:
通过对用户上传的Proto文件进行编译,得到用户预设的指定消息名称对应的指定消息结构;生成与指定消息结构对应的Web页面并填充指定消息的数据,将Web页面数据转化为Json格式数据后,创建指定消息对象;对指定消息对象进行序列化,得到指定消息的ProtoBuf数据文件。解决了Protobuf数据的构造代价比较大数据准确性差、Protobuf数据的复用率低以及对Protobuf使用人员技术要求高的问题,简化数据构造的过程,降低对使用者技术的要求,提高数据构造的效率,提高了数据的复用性和准确性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的数据构造方法流程图;
图2是本发明实施例二提供的数据构造方法流程图;
图3是本发明实施例二提供的编译Proto定义文件示意图;
图4是本发明实施例二提供的生成规则对应图;
图5是本发明实施例二提供的代码模板示意图;
图6是本发明实施例二提供的生成页面示意图;
图7是本发明实施例三提供的数据构造装置第一种结构示意图;
图8是本发明实施例三提供的数据构造装置第二种结构示意图;
图9是本发明实施例三提供的数据构造装置第三种结构示意图;
图10是本发明实施例三提供的数据构造装置第四种结构示意图;
图11是本发明实施例三提供的数据构造装置第五种结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
参见图1,本发明实施例提供了一种数据构造方法,该方法包括:
101、对用户上传的Proto文件进行编译,得到与用户预设的指定消息名称对应的指定消息结构;Proto文件为ProtoBuf数据的定义文件;
102、生成与指定消息结构对应的Web页面,将指定消息的数据填充到Web页面中生成Web页面数据;
103、将Web页面数据转化为Json格式数据;
104、根据Json格式数据,创建指定消息对象;
105、对指定消息对象进行序列化,得到指定消息的ProtoBuf数据文件。
具体地,得到指定消息的ProtoBuf数据文件之后,还包括:
对Proto文件进行编译得到ProtoBuf数据的消息结构,并根据指定消息名称获取对应的指定消息结构;
对指定消息的ProtoBuf数据文件进行反序列化,得到指定消息对象;
根据指定消息对象,获取对应的Json格式数据;
将Json格式数据填充到Web页面,进行转化得到Web页面数据。
进一步地,将Json格式数据填充到Web页面,进行转化得到Web页面数据之后,包括:
获取用户在Web页面的操作,根据操作对生成Web页面数据进行编辑;编辑至少包括修改、删除、增加、隐藏以及展示。
具体地,对用户上传的Proto文件进行编译之前,包括:
获取用户上传的Proto文件以及用户预设的指定消息名称和指定消息的数据。
具体地,对用户上传的Proto文件进行编译,得到用户预设的指定消息名称对应的指定消息结构,包括:
对用户上传的Proto文件进行编译,得到ProtoBuf数据的消息结构;
在ProtoBuf数据的消息结构中查找与用户预设的指定消息名称对应的指定消息结构。
本发明实施例提供的方法,通过对用户上传的Proto文件进行编译,得到用户预设的指定消息名称对应的指定消息结构;生成与指定消息结构对应的Web页面并填充指定消息的数据,将Web页面数据转化为Json格式数据后,创建指定消息对象;对指定消息对象进行序列化,得到指定消息的ProtoBuf数据文件。解决了Protobuf数据的构造代价比较大数据准确性差、Protobuf数据的复用率低以及对Protobuf使用人员技术要求高的问题,简化数据构造的过程,降低对使用者技术的要求,提高数据构造的效率,提高了数据的复用性和准确性。
实施例二
参见图2,本发明实施例提供了一种数据构造方法,该方法包括:
201、获取用户上传的Proto文件以及用户预设的指定消息名称和指定消息的数据;
具体地,Proto文件为ProtoBuf数据的定义文件;用户还需要预定指定消息名称和指定消息的数据以便后续使用。
202、对用户上传的Proto文件进行编译,得到与用户预设的指定消息名称对应的指定消息结构;
具体地,对用户上传的Proto文件进行编译,得到ProtoBuf数据的消息结构;在ProtoBuf数据的消息结构中查找用户预设的指定消息名称对应的指定消息结构。
其中,对Proto文件的编译工作由Proto文件编译模块来实现,Proto文件编译模块的输入是一个或多个proto文件的,经过一系列的编译过程(词法、语法、语义分析),最终得到编译结果;首先编译得到的结果是一个proto文件的文件描述符FileDescriptor,该FileDescriptor详细的记录和描述了文件(对象)中各个message、各个结构字段的取值、各个结构字段之间的关系及结构内部的一些组织形式;而对于数据构造,最终需要得到的是针对某个消息message的描述符Descriptor,即指定消息结构。
另外,编译模块比较重要的一个过程是处理proto文件之间的依赖关系,该依赖关系可能是同一proto文件内部各个message之间,也可能是不同proto文件之间message的依赖关系,在编译当前message结构的过程中,需要提前查找并编译message的依赖项。所有proto文件是按照目录的层次结构存储在SourceDiskTree数据结构(功能类似于Database)中,编译的中间结果是存储在编译器对象Importer的pool结构中。如果编译过程顺利完成,能够在Importer中得到各个proto文件,各个message以及各个field的信息。
参见图3,整个编译流程的输入是一个或是多个proto文件,首先产生FileDescriptor,最终得到针对单个消息message的消息描述符Descriptor,在整个编译的过程中会产生一系列的中间结果。
203、生成与指定消息结构对应的Web页面,将指定消息的数据填充到Web页面中生成Web页面数据;
具体地,Web页面生成主要包括两部分,一是前台页面的生成,二是对应的JavaScript部分的生成。由于页面的行为由JavaScript进行控制,所以代码生成部分的主要工作集中在JavaScript代码生成部分。对于页面部分可以采用统一的html代码,因为html只是内容的载体,变化的是JavaScript所控制部分。对于JavaScript部分,需要根据编译模块的结果消息描述符Descriptor而去控制html展示成为不同的数据构造页面。
编译结果和前台展示形式需要制定详细的生成方案和对应关系。考虑到JavaScript代码的可维护性和扩展性,本发明实施例采用了ExtJS(ajax框架)作为JavaScript代码生成的一个标准。采用ExtJS框架由于其功能强大,界面美观,是一种轻量级实现框架,并且将html中的一些控件以对象的形式进行了封装。
1、生成规则决定了编译模块得到的Descriptor对象如何生成对应的Web页面,方便用户的编辑。对于一个Web页面,首先考虑的是整个页面的布局结构,为了方便后续功能的扩展,并结合ExtJS框架的基本布局结构,本发明实施例采用border方式的布局,即将整个页面分为东、南、西、北、中五部分。所有的生成页面采用统一的布局结构,目前只利用了布局结构的西部和中部。西部(即页面的左边)主要用来做导航功能,为了方便和Web端接口进行接入;中部是生成的主要部分,根据message描述符的不同而生成的不同的控件。针对message描述符的具体信息,不同字段会生成不同的页面部分,两者的对应关系如图4所示:
对于消息message定义部分,基本单位是一个普通字段,普通字段主要包括修饰符Modifier、基本数据类型和字段名称三部分;修饰符目前只有三种"optional"、"required"和"repeated";基本数据类型与各种编程语言数据类型一致,主要包括"double","float","int64","uint64","int32","fixed64","fixed32","bool","string","bytes","uint32","enum"等。
参见图4,对于修饰符为optional或required的普通字段,对应到页面的显示部分是一个基本单位,包括一个label和input,label主要显示字段名称和具体的数据类型,而input控件主要用来提供用户的输入。此外对于修饰符为required的字段,label显示为红色字体,提醒用户该字段不能为空。对于enum类型和bool类型字段部分,为了数据的准确性,采用下拉菜单(combobox)的显示样式,用户只需要选择具体的enum值即可。有效的减少数据出错的可能性。
对于修饰符为repeated的普通字段,显示位置与optional和required普通字段部分不同,所有的optional和requreid的普通字段部分是显示在一个FieldContainer里面,每一个repeated字段是一个新的FieldContainer。对于repeated的字段部分需要添加新增和删除按钮,方便用户添加和删除数据单位。每次添加都是在当前FieldContainer里面新增加一个新的Form,然后在Form中添加一个普通的字段。但是普通字段部分没有label显示部分。所有添加的repeated普遍字段部分共用一个label显示字段名称和数据类型。
对于修饰符为optional或required的message字段,对应到页面显示部分也是一个新的FieldContainer,跟optional或reuqired的普通类型字段不在一个FieldContainer里面。对于optional部分,默认是不展开该message的具体内容的,只有当用户点击Edit按钮时,才会创建该message对象,并显示具体包含的字段;对于required部分,默认对象已经创建,并且不能删除,只能进行隐藏和显示的操作。对于message里面包含的子字段的处理部分,跟各种字段处理情况相同。
对于修饰符为repeated的message字段部分,对应到页面的显示部分跟repeated普通字段部分一致,但是每次添加和删除的单位是一个message数据单位,页面显示为一个Form。Message内部的各个字段显示形式跟各种字段显示方式一致。由外到内是一个不断嵌套的过程,直到包含所有嵌套字段。
2、考虑到代码生成设计到多种语言混合编程,如何保证代码的可维护性和可扩展性显得十分重要。对于后台程序的开发采用C/C++语言,而要生成的Web代码则包括html,JavaScript,甚至一些CSS样式。如何解决跨语言编程和代码的易读性,是工具实现的一个难点,最终实现采用了模板引擎技术ctemplate。模板引擎并是模型和视图分离的重要手段。整个代码生成部分的模板设计如图5所示,各个代码模板的主要功能介绍如下:
pb_extjs.tpl:该模板是整个代码模板的开始部分,也是框架部分,模板包含3个子模板,frame.tpl、top_form.tpl和sharedJavaScript.tpl,该模板主要用来初始化一些全局变量。
pb_extjs_frame.tpl:该模板主要功能是控制生成ExtJS页面的整体结构,包括构造一些全局容器控件,指定容器的布局结构,以及一些显示样式。在我们的代码生成过程中主要初始化总的布局结构为border,并创建和初始化结构的west部分和center部分。
pb_extjs_top_form.tpl:由于整个布局的center部分是分层进行构建和初始化的。该模板创建并初始化center部分的最外层控件,并添加最外层控件的事件处理函数和部分子控件。此处命名中的top和后面的nested的区别开来,主要是最外层控件的生成工作。
pb_extjs_sharedJavaScript.tpl:该模板用来添加一些公共的JavaScript函数和一些通用的事件处理函数,例如获取整个页面用户输入的数据、提交数据请求到后台、用户输入数据合法性验证、数据重置和加载后台数据到页面显示等。
pb_extjs_nested_form_optional.tpl:该模板是针对optional message field而设计,主要负责在页面中生成message对应的FieldContainer控件,包括form的edit、show和hide事件处理,以及单个form内部字段的生成和相应事件处理等。
pb_extjs_nested_form_re_peated.tpl:该模板是针对repeated field而设计,包括message类型和non-message类型,两种类型在生成逻辑方面存在一致性。模板主要负责在页面中生成message对应的FieldContainer控件,包括form的add和delete事件处理,以及每个form内部字段的生成和对应的事件处理。
pb_extjs_nested_form_re_quired.tpl:该模板是针对required message field而设计,主要负责在页面中生成message对应的FieldContainer控件,包括form的show和hide事件处理,以及单个form内部字段的生成和对应的事件处理等。
pb_extjs_common_field.tpl:该模板是针对optional/required non-messagefield而设计,是整个代码模板的基本单位,前面提到的每个模板最终都由common_field.tpl构成。该模板主要负责基本字段的添加和显示,内部包含一些针对optional和required字段的特殊处理。
204、将Web页面数据转化为Json格式数据;
具体地,JSON数据是用键值对的形式存储的,采用完全独立于语言的文本格式,是理想的数据交换语言。
205、根据Json格式数据,创建指定消息对象;
具体地,数据构造模块从Web获得JSON格式字符串,如:{"AddressBook":{"AddressBook_1":{"person_1":{"name":"lericzhang","id":"6210","email":"leric@tencent.com","phone_1":{"number":"13613665015","type":"0"}}},"AddressBook_2":{"person_1":{"name":"lericzhang","id":"6210","email":"leric@tenc ent.com","phone_1":{"number":"13613665015","type":"0"}}}}}。所有字段都是以key/value形式出现,key即为field的name,value则是用户输入的具体数值,如果key值对应的field为message,则value值以"{}"包含。在JSON字符串中,所有的key和value值均是使用""进行包括起来,也就是采用字符串的形式,后续数据构造的过程中根据字段的定义需要做数据类型的转化。
206、对指定消息对象进行序列化,得到指定消息的ProtoBuf数据文件。
具体地,采用预设的编码方式对指定消息对象进行序列化,得到指定消息的ProtoBuf数据文件。
步骤201-206,完成了数据的构造过程,从用户上传一个或多个proto文件开始,到指定消息的ProtoBuf数据文件的整个过程,最终得到的ProtoBuf数据文件内容是经过编码的数据,对用户来说是不可识别的。
参见图6,下面对指定消息的ProtoBuf数据文件进行解析,具体过程如下
207、对Proto文件进行编译得到ProtoBuf数据的消息结构,并根据指定消息名称获取对应的指定消息结构;
具体步骤参见步骤202,不再赘述。
208、对指定消息的ProtoBuf数据文件进行反序列化,得到指定消息对象;
具体地,采取与步骤206序列化相反的处理,采用预设的编码方式对指定消息的ProtoBuf数据文件进行反序列化,得到指定消息对象。
209、根据指定消息对象,获取对应的Json格式数据;
具体地,解析模块的输入是已存在的Protobuf数据文件,在进行数据解析之前,首先需要知是数据文件的格式,主要分为是普通文件格式和Record I/O文件格式。两种文件的读取接口不同。其次是该数据文件对应的proto文件和message名称,只有知道这个信息才能够编译proto文件获得message的具体描述符,进而可以解析文件内容获得各个字段对应的取值。数据解析模块的主要处理分大体分为2个过程:首先从数据文件中读取数据并序列化为message对象,其次遍历message对象获得对应的JSON格式字符串。
210、将Json格式数据填充到Web页面,进行转化得到Web页面数据。
具体地,将Json格式数据填充到Web页面,进行转化得到Web页面数据之后,包括:
获取用户在Web页面的操作,根据操作对生成Web页面数据进行编辑;编辑至少包括修改、删除、增加、隐藏以及展示。
步骤207-210,完成了ProtoBuf数据的解析过程。
本发明实施例提供的方法,通过对用户上传的Proto文件进行编译,得到用户预设的指定消息名称对应的指定消息结构;生成与指定消息结构对应的Web页面并填充指定消息的数据,将Web页面数据转化为Json格式数据后,创建指定消息对象;对指定消息对象进行序列化,得到指定消息的ProtoBuf数据文件。解决了Protobuf数据的构造代价比较大数据准确性差、Protobuf数据的复用率低以及对Protobuf使用人员技术要求高的问题,简化数据构造的过程,降低对使用者技术的要求,提高数据构造的效率,提高了数据的复用性和准确性。
实施例三
参见图7,本发明实施例提供了一种数据构造装置,该装置包括:
第一编译模块701,用于对用户上传的Proto文件进行编译,得到与用户预设的指定消息名称对应的指定消息结构;Proto文件为ProtoBuf数据的定义文件;
第一Web生成模块702,用于生成与指定消息结构对应的Web页面,将指定消息的数据填充到Web页面中生成Web页面数据;
第一Json转化模块703,用于将Web页面数据转化为Json格式数据;
第一对象生成模块704,用于根据Json格式数据,创建指定消息对象;
ProtoBuf数据生成模块705,用于对指定消息对象进行序列化,得到指定消息的ProtoBuf数据文件。
具体地,参见图8,该装置还包括:
第二编译模块706,用于ProtoBuf数据生成模块得到指定消息的ProtoBuf数据文件之后,对Proto文件进行编译得到ProtoBuf数据的消息结构,并根据指定消息名称获取对应的指定消息结构;
第二对象生成模块707,用于对指定消息的ProtoBuf数据文件进行反序列化,得到指定消息对象;
第二Json转化模块708,用于根据指定消息对象,获取对应的Json格式数据;
第二Web生成模块709,用于将Json格式数据填充到Web页面,进行转化得到Web页面数据。
进一步地,参见图9,该装置还包括:
编辑模块710,用于第二Web生成模块进行转化得到Web页面数据之后,获取用户在Web页面的操作,根据操作对生成Web页面数据进行编辑;编辑至少包括修改、删除、增加、隐藏以及展示。
具体地,参见图10,该装置包括:
获取模块711,用于第一编译模块Proto文件进行编译之前,获取用户上传的Proto文件以及用户预设的指定消息名称和指定消息的数据。
具体地,参见图11,第一编译模块701,包括:
编译单元701a,用于对用户上传的Proto文件进行编译,得到ProtoBuf数据的消息结构;
查找单元701b,用于在ProtoBuf数据的消息结构中查找与用户预设的指定消息名称对应的指定消息结构。
本发明实施例提供的装置,通过对用户上传的Proto文件进行编译,得到用户预设的指定消息名称对应的指定消息结构;生成与指定消息结构对应的Web页面并填充指定消息的数据,将Web页面数据转化为Json格式数据后,创建指定消息对象;对指定消息对象进行序列化,得到指定消息的ProtoBuf数据文件。解决了Protobuf数据的构造代价比较大数据准确性差、Protobuf数据的复用率低以及对Protobuf使用人员技术要求高的问题,简化数据构造的过程,降低对使用者技术的要求,提高数据构造的效率,提高了数据的复用性和准确性。
需要说明的是:上述实施例提供的数据构造装置在对Protobuf数据进行构造时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据构造装置与数据构造方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种数据构造方法,其特征在于,应用于网络通信领域,所述方法包括:
对用户上传的Proto文件进行编译,得到ProtoBuf数据的消息结构;在所述ProtoBuf数据的消息结构中查找用户预设的指定消息名称对应的指定消息结构;所述Proto文件为ProtoBuf数据的定义文件;
生成与所述指定消息结构对应的Web页面,将所述指定消息的数据填充到所述Web页面中生成Web页面数据;
将所述Web页面数据转化为Json格式数据;
根据所述Json格式数据,创建指定消息对象;
对所述指定消息对象进行序列化,得到所述指定消息的ProtoBuf数据文件。
2.根据权利要求1所述的方法,其特征在于,所述得到所述指定消息的ProtoBuf数据文件之后,还包括:
对所述Proto文件进行编译得到ProtoBuf数据的消息结构,并根据所述指定消息名称获取对应的指定消息结构;
对所述指定消息的ProtoBuf数据文件进行反序列化,得到所述指定消息对象;
根据所述指定消息对象,获取对应的所述Json格式数据;
将所述Json格式数据填充到所述Web页面,进行转化得到所述Web页面数据。
3.根据权利要求2所述的方法,其特征在于,所述将所述Json格式数据填充到所述Web页面,进行转化得到所述Web页面数据之后,包括:
获取用户在所述Web页面的操作,根据所述操作对所述Web页面数据进行编辑;所述编辑至少包括修改、删除、增加、隐藏以及展示。
4.根据权利要求1所述的方法,其特征在于,所述对用户上传的Proto文件进行编译之前,包括:
获取用户上传的Proto文件以及用户预定的所述指定消息名称和所述指定消息的数据。
5.一种数据构造装置,其特征在于,应用于网络通信领域,所述装置包括:
第一编译模块,用于对用户上传的Proto文件进行编译,得到ProtoBuf数据的消息结构;在所述ProtoBuf数据的消息结构中查找与用户预设的指定消息名称对应的指定消息结构;所述Proto文件为ProtoBuf数据的定义文件;
第一Web生成模块,用于生成与所述指定消息结构对应的Web页面,将所述指定消息的数据填充到所述Web页面中生成Web页面数据;
第一Json转化模块,用于将所述Web页面数据转化为Json格式数据;
第一对象生成模块,用于根据所述Json格式数据,创建指定消息对象;
ProtoBuf数据生成模块,用于对所述指定消息对象进行序列化,得到所述指定消息的ProtoBuf数据文件。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
第二编译模块,用于所述ProtoBuf数据生成模块得到所述指定消息的ProtoBuf数据文件之后,对所述Proto文件进行编译得到ProtoBuf数据的消息结构,并根据所述指定消息名称获取对应的指定消息结构;
第二对象生成模块,用于对所述指定消息的ProtoBuf数据文件进行反序列化,得到所述指定消息对象;
第二Json转化模块,用于根据所述指定消息对象,获取对应的所述Json格式数据;
第二Web生成模块,用于将所述Json格式数据填充到所述Web页面,进行转化得到所述Web页面数据。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
编辑模块,用于所述第二Web生成模块进行转化得到所述Web页面数据之后,获取用户在所述Web页面的操作,根据所述操作对所述Web页面数据进行编辑;所述编辑至少包括修改、删除、增加、隐藏以及展示。
8.根据权利要求5所述的装置,其特征在于,所述装置包括:
获取模块,用于所述第一编译模块Proto文件进行编译之前,获取用户上传的Proto文件以及用户预定的所述指定消息名称和所述指定消息的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310027270.7A CN103970737B (zh) | 2013-01-24 | 2013-01-24 | 一种数据构造方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310027270.7A CN103970737B (zh) | 2013-01-24 | 2013-01-24 | 一种数据构造方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103970737A CN103970737A (zh) | 2014-08-06 |
CN103970737B true CN103970737B (zh) | 2018-06-22 |
Family
ID=51240255
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310027270.7A Active CN103970737B (zh) | 2013-01-24 | 2013-01-24 | 一种数据构造方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103970737B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104765760B (zh) * | 2015-01-04 | 2018-02-06 | 深圳微迅信息科技有限公司 | 一种基于json格式的页面生成和显示方法 |
CN105069116A (zh) * | 2015-08-11 | 2015-11-18 | 北京思特奇信息技术股份有限公司 | 一种将json串转化为数组的方法及系统 |
CN105787128B (zh) * | 2016-03-29 | 2019-04-23 | 四川秘无痕信息安全技术有限责任公司 | 一种恢复Java序列化文件数据的方法 |
CN107276968A (zh) * | 2016-04-07 | 2017-10-20 | 深圳市萨法瑞科技有限公司 | 一种网络传输方法及系统 |
CN106066828B (zh) * | 2016-05-30 | 2019-02-22 | 北京奇艺世纪科技有限公司 | 一种生成Protobuf格式测试数据的方法及装置 |
CN106648945B (zh) * | 2016-09-30 | 2019-10-15 | 北京金山安全软件有限公司 | 一种接口数据测试方法、装置及电子设备 |
CN106452879A (zh) * | 2016-10-20 | 2017-02-22 | 国网青海省电力公司电力科学研究院 | 一种基于pb的scd跨平台解析方法 |
CN106775696A (zh) * | 2016-12-08 | 2017-05-31 | 蓝信工场(北京)科技有限公司 | 数据处理方法及装置 |
CN107423051B (zh) * | 2017-05-05 | 2023-03-24 | 腾讯科技(深圳)有限公司 | 数据的配置方法和装置 |
CN107590076B (zh) * | 2017-09-22 | 2021-08-13 | 北京奇艺世纪科技有限公司 | 获取业务数据的方法、生成业务数据源的方法及装置 |
CN110298165B (zh) * | 2018-03-22 | 2023-05-23 | 腾讯科技(深圳)有限公司 | 安全访问共享内存的方法、装置以及认证代理 |
CN110941655B (zh) * | 2018-09-21 | 2023-04-28 | 中移(杭州)信息技术有限公司 | 一种数据格式转换方法及装置 |
CN109582318B (zh) * | 2018-12-20 | 2022-05-10 | 武汉斗鱼鱼乐网络科技有限公司 | Portobuf本地化的处理方法、装置、终端及存储介质 |
CN109857735B (zh) * | 2018-12-29 | 2021-05-04 | 上海瑞家信息技术有限公司 | 一种通过excel进行规则描述的数据构造方法及系统 |
DE102019209314A1 (de) | 2019-06-27 | 2020-12-31 | Audi Ag | Verfahren und Prozessoreinrichtung zum Wechseln eines Datenformats von Kommunikationsdaten einer Gerätekommunikation sowie Kraftfahrzeug |
CN110377289A (zh) * | 2019-07-01 | 2019-10-25 | 北京字节跳动网络技术有限公司 | 一种数据解析方法、装置、介质和电子设备 |
CN110673856B (zh) * | 2019-09-30 | 2023-03-28 | 新华三大数据技术有限公司 | 一种数据处理方法、装置及机器可读存储介质 |
CN111131219B (zh) * | 2019-12-19 | 2022-04-05 | 北京轻元科技有限公司 | 基于FlatBuffers的物联网高效数据传输方法 |
CN112379886A (zh) * | 2020-11-30 | 2021-02-19 | 北京一流科技有限公司 | 数据格式转换系统及其方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8127224B2 (en) * | 2003-06-11 | 2012-02-28 | Wtvii, Inc. | System for creating and editing mark up language forms and documents |
CN101944120B (zh) * | 2010-09-19 | 2012-05-30 | 青岛海信移动通信技术股份有限公司 | 一种无线标记语言脚本的执行方法及装置 |
CN102810069A (zh) * | 2012-07-16 | 2012-12-05 | 深圳市融创天下科技股份有限公司 | 一种java对象的请求和响应方法、装置、系统和终端 |
CN103281311B (zh) * | 2013-05-12 | 2016-09-14 | 南京载玄信息科技有限公司 | 一种使用Protobuf描述的物联网协议解析方法 |
-
2013
- 2013-01-24 CN CN201310027270.7A patent/CN103970737B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN103970737A (zh) | 2014-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103970737B (zh) | 一种数据构造方法和装置 | |
CN114035773B (zh) | 一种基于配置的低代码开发表单方法、系统及装置 | |
CN101334728B (zh) | 一种基于xml文档描述的界面生成方法和装置 | |
CN100530083C (zh) | 用于创建应用程序的系统及方法 | |
CN101840334B (zh) | 一种软件构件服务化封装方法 | |
CN102096588B (zh) | 一种包含控件的页面的建立方法 | |
CN113126990B (zh) | 一种页面开发方法、装置、设备及存储介质 | |
CN109657215A (zh) | 基于模板的文档生成方法、设备、存储介质及装置 | |
CN104731589A (zh) | 用户界面的自动生成方法及自动生成装置 | |
CN103077185A (zh) | 一种基于对象的自定义扩展信息的方法 | |
CN104484216A (zh) | 服务接口文档和在线测试工具生成方法、装置 | |
CN103383645A (zh) | 代码生成方法及系统 | |
CN104407863A (zh) | 抽象控件模型编程装置和方法 | |
CN101446971A (zh) | 构建内容管理系统的方法及装置 | |
CN108509199A (zh) | 自动生成中文注释的方法、装置、设备及存储介质 | |
CN101668047B (zh) | 组合服务描述语言自动生成方法及装置 | |
CN101488086A (zh) | 一种基于领域模型的软件生成方法及装置 | |
CN113961183B (zh) | 可视化编程方法、装置、设备及存储介质 | |
CN107861723A (zh) | 海量数据处理方法及其系统 | |
CN106648569A (zh) | 目标序列化实现方法和装置 | |
CN112162729A (zh) | 一种基于vue的组件开发及展示方法 | |
CN112162751A (zh) | 一种接口文档自动生成方法及系统 | |
CN110362317A (zh) | 一种代码转换方法、装置和存储介质 | |
CN107506227A (zh) | 管理编译代码的方法和装置 | |
CN117076392A (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20190730 Address after: Shenzhen Futian District City, Guangdong province 518000 Zhenxing Road, SEG Science Park 2 East Room 403 Co-patentee after: Tencent cloud computing (Beijing) limited liability company Patentee after: Tencent Technology (Shenzhen) Co., Ltd. Address before: Shenzhen Futian District City, Guangdong province 518000 Zhenxing Road, SEG Science Park 2 East Room 403 Patentee before: Tencent Technology (Shenzhen) Co., Ltd. |
|
TR01 | Transfer of patent right |