CN113918635A - 接口数据格式转换方法和装置 - Google Patents
接口数据格式转换方法和装置 Download PDFInfo
- Publication number
- CN113918635A CN113918635A CN202111229125.8A CN202111229125A CN113918635A CN 113918635 A CN113918635 A CN 113918635A CN 202111229125 A CN202111229125 A CN 202111229125A CN 113918635 A CN113918635 A CN 113918635A
- Authority
- CN
- China
- Prior art keywords
- interface
- key
- data
- key name
- name
- 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.)
- Pending
Links
Images
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
Abstract
本申请提出了一种接口数据格式转换方法和装置,所述方法根据匹配规则建立接口字段和目标字段的映射关系,通过该映射关系能够实现字段格式间的相互转换,再通过接口键值的具体数据格式调用对应的获取数据方法,将获取到的接口键值数据通过对应关系插入到目标键名所对应的目标键值字段中,生成最终的目标数据。本申请的区别之处在于,通过自动获取键值数据、自动获取键名数据生成映射关系的方式能够自动进行接口数据的格式转换,使得前端再不需要改变目标字段格式的情况下也能够接受由接口传来的数据内容,并且在本方案的获取键值数据的过程中,无需调用多个获取数据方法来试验调用数据内容,直接调取数据的速度更快,提高了效率。
Description
技术领域
本申请涉及数据处理领域,特别是涉及一种接口数据格式转换方法和装置。
背景技术
“数据驾驶舱”是指企业需要对于当前的业务需求以及数据应用进行梳理,清晰的了解哪些业务可以用数据来进行分析,并通过“故事面板”的方式来对这些数据分析结果进行统一展示与管理。根据企业自身业务需要,“数据驾驶舱”产品所展示的页面越来越丰富,那么对应页面上的数据来源也会越来越多。
一般来说,数据的提供方不仅仅只是自有系统,也可能为其它第三方服务,且第三方提供的数据也不只是通过接口提供,也存在通过数据库等形式提供。
针对上述情况,现有的驾驶舱开发模式通常让后端对接第三方数据源,然后提供接口向前端返回第三方数据,这样针对前端开发人员来说,不需要处理复杂的数据源,只需要调用接口,并将接口返回的数据放入页面响应的位置即可。
上述通过后端开发人员调用的现状虽然减轻了前端调用的逻辑,但是针对数据的返回格式,后端开发人员并没有进行处理,而是需要前端拿到对应的数据格式之后,然后进行代码编写。
在实际应用中驾驶舱页面数据来源可能来自于不同公司,或者同公司的不同部门,不同数据来源导致对数据格式的定义也不同,这也就导致了驾驶舱开发人员需要处理每一个数据源的数据格式,将其转化成驾驶舱大屏能用的数据格式,这样才能用于驾驶舱大屏最终的展现。但是原始的这种通过对接接口数据,然后再使用代码编程处理并转化数据格式的方式,无疑是一种增加开发人员工作量的、极其低效的一种方式。
再者,针对于驾驶舱项目的上线流程:代码编写、打包、部署、上线,如果接口的数据格式变更,将导致上述所有流程将重新走一遍,增加了开发和运维的成本,也增加了时间消耗成本。
因此,为提高开发效率,亟待设计一种可以自动将接口数据格式进行转化的方法,以解决上述提到的问题。
发明内容
本申请实施例提供了一种接口数据格式转换方法和装置,针对接口所提供的数据格式与前端所需的目标格式不一致使得开发人员需要手动处理每个数据源格式产生的开发效率低的问题,提高接口数据转换效率。
第一方面,本申请实施例提供了一种接口数据格式转换方法,所述方法包括:获取接口数据,其中,所述接口数据包括接口键名、接口键值;所述接口数据对应有第一数据结构,从所述第一数据结构中解析得到所述接口键值所对应的键值类型,根据所述键值类型获取所述接口键值;获取目标键名,对所述目标键名进行解析,生成第二数据结构,其中,所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对;生成基于所述接口键名与所述目标键名的映射关系对象,基于所述映射关系对象将所述接口键名对应的所述接口数据的所述接口键值存入所述第二数据结构的键值中,生成目标数据。
在其中一些实施例中,所述第一数据结构包括键名类型、所述键值类型以及下级数据结构,其中,所述键名类型表示为所述接口数据的键值Java对象类型,所述键值类型表示为所述接口数据的键值Java对象类型,所述下级数据结构表示为所述接口键名的下一层级对象数据结构。
在其中一些实施例中,所述接口键名的获取步骤包括:遍历所述接口数据的每个键值对,获取第一键名,根据键值类型确认所述第一键名是否包括JSON数据,在所述第一键名包含JSON数据的情况下,获取各JSON数据的第二键名,确定所述接口键名包括所述第一键名以及所述第二键名。
在其中一些实施例中,“生成基于所述接口键名与所述目标键名一对一的映射关系对象”包括:分别将所述接口键名转换成第一全路径键名以及将所述目标键名转换成第二全路径键名;将所述第一全路径键名与所述第二全路径键名一一对应得到所述接口键名与所述目标键名一对一的映射关系。
在其中一些实施例中,转换所述第一全路径键名或所述第二全路径键名的方式包括:在所述接口键名或所述目标键名包含JSON对象的层级结构的情况下,列出所有层级,并且层级之间采用分隔符分割,生成对应的所述第一全路径键名、所述第二全路径键名,在所述接口键名或所述目标键名不包含JSON对象的层级结构的情况下,将所述接口键名作为所述第一全路径键名、将所述目标键名作为所述第二全路径键名。
在其中一些实施例中,“所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对”包括:通过读取所述分隔符获取第一全路径的所有层级;根据层级数调用相应次数的层级以获取所述目标键名,以任意值作为预填充项填充至键值字段中,生成以所述目标键名为键名、以所述任意值为键值的键值对。
在其中一些实施例中,所述方法还包括:当所述接口键名和/或所述目标键名发生变动后,对所述映射关系对象进行更新,以更新后的所述映射关系对象对变动后的所述接口键名和/或变动后的所述目标键名进行转换。
在其中一些实施例中,所述方法还包括:将所述接口键名存入接口数据键名字段中,将所述键值类型存入接口数据键值字段中,将每一当前的所述接口键名的下一层级的解析结构存入下一层级结构字段中,生成将所述接口数据以层级形式表示的解析结果对象,将所述解析结果对象、所述映射关系对象、所述第二数据结构分别存入接口字段、关系字段、目标字段所对应的值中,并分配基于每一所述接口字段、每一所述关系字段、每一所述目标字段的唯一标识符,得到接口默认转化规则对象;在下次接入接口前,先判断所述接口是否携带所述唯一标识符,在判断为是的情况下,根据所述唯一标识符从所述接口默认转换规则对象中查询相对应的所述接口字段、所述关系字段、所述目标字段所对应的值,得到所述解析结果对象、所述映射关系对象、所述第二数据结构,并基于所述解析结果对象、所述映射关系对象、所述第二数据结构生成目标数据。
第二方面,本申请实施例提供了一种接口数据格式转换装置,包括:数据获取模块,用于获取接口数据,其中,所述接口数据包括接口键名、接口键值;键值获取模块,用于在所述接口数据对应有第一数据结构的情况下,从所述第一数据结构中解析得到所述接口键值所对应的键值类型,根据所述键值类型获取所述接口键值;数据结构解析模块,用于对所述目标键名进行解析,生成第二数据结构,其中,所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对;键名转换模块,用于生成基于所述接口键名与所述目标键名的映射关系对象,基于所述映射关系对象将所述接口键名对应的所述接口数据的所述接口键值存入所述第二数据结构的键值中,生成目标数据。
第三方面,本申请实施例提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行第一方面任一项所述的接口数据格式转换方法。
第四方面,本申请实施例提供了一种计算机程序产品,包括软件代码部分,当所述计算机程序产品在计算机上被运行时,所述软件代码部分用于执行根据第一方面任一项所述的接口数据格式转换方法。
第五方面,本申请实施例提供了一种可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序包括用于控制过程以执行过程的程序代码,所述过程包括根据第一方面任一项所述的接口数据格式转换方法。
本申请实施例的主要贡献和创新点如下:
本申请实施例通过将数据处理为键值对的形式,根据匹配规则建立接口字段和目标字段的映射关系,通过该映射关系能够实现字段格式间的相互转换,再通过接口键值的具体数据格式调用对应的获取数据方法,将获取到的接口键值数据通过对应关系插入到目标键名所对应的目标键值字段中,生成最终的目标数据。本申请的区别之处在于,通过自动获取键值数据、自动获取键名数据生成映射关系的方式能够自动进行接口数据的格式转换,使得前端再不需要改变目标字段格式的情况下也能够接受由接口传来的数据内容,并且在本方案的获取键值数据的过程中,无需调用多个获取数据方法来试验调用数据内容,直接调取数据的速度更快,提高了效率。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的接口数据格式转换方法的流程图;
图2是根据本申请实施例的接口数据解析方法的流程示意图;
图3是根据本申请实施例的字段映射关系对象创建的流程示意图;
图4是根据本申请实施例的第二数据结构解析方法的流程示意图;
图5是根据本申请实施例的目标数据创建方法的流程示意图;
图6根据本申请的另一实施例的接口数据格式转化的流程示意图;
图7是根据本申请实施例的接口数据格式转换装置的结构框图;
图8是根据本申请实施例的电子装置的硬件结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
实施例一
本申请实施例应用于系统中,系统架构包括:前端、后端以及第三方数据源,其中,后端对接第三方数据源,并提供接口向前端返回第三方数据。
在接口提供数据的过程中,由于第三方数据格式和前端所需的数据格式存在不一致的问题,前端无法以获取到第三方数据直接渲染在网页上,因此需要提供一种接口数据格式转换方法对数据格式进行自动转换,参考图1,本申请提供了一种接口数据格式转换,所述方法包括:
步骤S101、获取接口数据,其中,所述接口数据包括接口键名、接口键值。
在本步骤中,接口数据指的是第三方数据源提供的数据,目标数据指的是前端所需的需要渲染在网页上的数据,二者格式差异具体体现在接口字段与目标字段不同,例如,接口字段为name,目标字段为username,二者虽然表示的都是存储姓名的含义,同时对应的数据也一样,但形式不同、无法直接获取数据,则需要将接口字段替换为目标字段。
当首次接入接口时,接口字段和目标字段还未建立映射关系,因此先获取源数据,也就是对应的接口数据。
另外,在本步骤中,后端通过接口传递给前端的接口数据是JSON格式数据,JSON格式数据一般由键值对(key-value)表示,如图2所示,获取到的接口数据为:
在图2中,“:”前的数据为接口键名、“:”后的数据为接口键值。同理,在目标数据中,“:”前的数据为目标键名、“:”后的数据为目标键值。
步骤S102、所述接口数据对应有第一数据结构,从所述第一数据结构中解析得到所述接口键值所对应的键值类型,根据所述键值类型获取所述接口键值。
在本步骤中,“根据键值类型获取所述接口键值”包括:根据所述键值类型调用对应的数据获取方法以获取所述接口键值。
具体地,键值类型指的是键值的数据类型,例如:"name":"Zhangsan"中,键值类型指的是"Zhangsan"的数据类型:String。本步骤的技术点在于,先通过解析键值对明确键值的数据类型,在获取接口数据的具体数据时则可以直接调用相对应的方法来获取。更具体来说,从JSON对象中获取某个键对应的值时,需要知道其具体的数据类型,否则就需要通过一个一个的获取数据方法如getString()、getInteger()等依次试验下去,才能最终得到某个键对应的值。因此本方案先对第一数据结构进行解析得到键值类型,再通过键值类型String调用相应的getString()方法或者通过键值类型Int调用相应的getInteger()方法。通过该步骤获取具体的接口键值时无需尝试调用多个获取数据方法,因此自动获取数据的速度更快。
步骤S103、获取目标键名,对所述目标键名进行解析,生成第二数据结构,其中,所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对。
在本步骤中,前端定义好目标键名后,目标键名所需获取的具体数值是等待接口传递过来的,也就是说本方案中接口数据格式转换的目的是通过前端所定义的目标键名来获取到每一目标键名对应的接口键值。
在本步骤中,第二数据结构指的是目标数据的数据结构,第一数据结构指的是接口数据的数据结构,二者都用来记录每一个键对应的数据类型,区别在于目标数据中的目标键值尚未获取,因此该键值字段中的数据是暂时存放着的,当目标键值对应的数据获取后,再替换键值字段中的原数据。因此在该步骤中键值可以为任意值。
当然,在其他实施例中,也可以将object填入键值字段中。Object作为最大父类,键值类型如String,Int,Long,JSONObject等都是Object的子类,因此在不明确键的具体数据类型时,可以以Object填充。示例性的,可以得到第二数据结构为:
步骤S104、生成基于所述接口键名与所述目标键名的映射关系对象,基于所述映射关系对象将所述接口键名对应的所述接口数据的所述接口键值存入所述第二数据结构的键值中,生成目标数据。
在本步骤中,先建立映射关系对象,再通过映射关系对象将接口键名-接口键值的对应关系转换为目标键名-接口键值的对应关系,从而得到目标数据。
具体地,在本步骤中,后端通过接口传递给前端的接口数据是JSON格式数据,JSON格式数据包括JSON对象以及JSON数组,其中,以大括号开始和结束的为JSON对象,以中括号开始和结束的为JSON数组,以
{
"name":"Zhangsan",
"age":62,
"cars":["Porsche","BMW","Volvo"]
}
为例,name、age为JSON对象,["Porsche","BMW","Volvo"]为JSON数组,JSON对象可以转换为键值对(key-value)的形式,即key1-value1为name-Zhangsan;key2-value2为cars-["Porsche","BMW","Volvo"]。
同理,目标数据也可以转换为键值对的格式,即key3-value3为username-Zhangsan;key4-value4为user_cars-["Porsche","BMW","Volvo"]。
先提取每个键值对的键名:key1:name;key2:cars;key3:username;key4:user_cars。再生成一对一的映射关系:将name映射到username,cars映射到user_cars。
在本步骤中建立映射关系的目的在于当再次获取到键名为name的数据,则自动将格式转换为username,无需开发人员再进行手动操作。
在第二数据结构中记录了目标键名以及任意值的键值对,在转换成目标数据时需要获取接口键值所需插入的具体位置,再将接口键值插入指定位置中,获取具体位置的方式通过目标字段与接口字段的对应关系来实现,例如,映射关系对象包括user-username,接口数据包括user-Zhangsan,目标数据包括username-Object,通过user-username可知Zhangsan需要插入在username所对应的键值中,因此将Zhangsan替换object得到username-Zhangsan即为最终想要获取的目标数据。
综上,针对上述S101至S104,本申请提供一种能够自动将接口数据的格式转换成前端定义的目标键名的格式的技术方案,具体地,本实施例通过将数据处理为键值对的形式,根据匹配规则建立接口字段和目标字段的映射关系,通过该映射关系能够实现字段格式间的相互转换,再通过接口键值的具体数据格式调用对应的获取数据方法,将获取到的接口键值数据通过对应关系插入到目标键名所对应的目标键值字段中,生成最终的目标数据。本申请的区别之处在于,通过自动获取键值数据、自动获取键名数据生成映射关系的方式能够自动进行接口数据的格式转换,使得前端再不需要改变目标字段格式的情况下也能够接受由接口传来的数据内容,并且在本方案的获取键值数据的过程中,无需调用多个获取数据方法来试验调用数据内容,直接调取数据的速度更快,提高了效率。
在其中一个可行实施例中,所述接口键名的获取步骤包括:遍历所述接口数据的每个键值对,获取第一键名,根据键值类型确认所述第一键名是否包括JSON数据,在所述第一键名包含JSON数据的情况下,获取各JSON数据的第二键名,确定所述接口键名包括所述第一键名以及所述第二键名。
示例性地,如图2所示,获取到的接口数据为:
定义的第一数据结构为:
{
"key":String,
"javaType":String,
"children":Object
}
在解析时,依次序遍历接口对象的键值对,首先获取接口对象的第一个键值对{"status":true},获取其键名status存入第一数据结构的key中,然后获取其键名的Java数据类型,true对应的Java数据类型为Boolean,存入接口数据结构的javaType中,因其不是JSON对象类型或者JSON数组类型,所以其children为null。获取第一个键值对的解析结果:{"key":"status","javaType":"Boolean","children":null}。然后继续解析第二个键值对{"object"{"username":"zhangsan","address":"hangzhou","nation":"China","phone":"138xxxxxxxx"}},使用同样的方法,获取key为object,javaType为JSONObject,因其Java类型为JSON对象类型,所以children字段用来存储其下一层级的解析结果。使用同样的方法进行解析,直至所有键值对解析完成,获得最终的解析结果:接口键名包括status、username、address、nation、phone。
同理对目标数据的键值对进行解析,获得最终的解析结果为:目标键名包括success、name、city、country、mobile。
在本实施例中,从结构数据数据结构中获取到层级结构。
具体地,所述第一数据结构包括键名类型、所述键值类型以及下级数据结构,其中,所述键名类型表示为所述接口数据的键值Java对象类型,所述键值类型表示为所述接口数据的键值Java对象类型,所述下级数据结构表示为所述接口键名的下一层级对象数据结构。
以上述列举的接口数据为例,"object"作为当前接口键名(第一键名)时,其下一层级对象数据结构的键名(第二键名)为"username"、"address"、"nation"、"China"、"phone"。
在其中一个可行实施例中,“生成基于所述接口键名与所述目标键名一对一的映射关系对象”包括:分别将所述接口键名转换成第一全路径键名以及将所述目标键名转换成第二全路径键名;将所述第一全路径键名与所述第二全路径键名一一对应得到所述接口键名与所述目标键名一对一的映射关系。
在本实施例中,数据解析完成后,建立接口键名与目标键名的一对一映射关系,可以看到,在解析过程中存在JSON对象类型,即当前键名存在下一层级的数据结构,因此在建立映射关系时也应当体现出JSON对象的层级关系,在本实施例中,将映射关系数据结构定义为:
{
"key1.key2.key3...":"value1.value2.value3..."
}
通过上述的结构定义可以看到,映射关系数据结构定义采用全路径键名的方式标识对象的层级关系,相邻两个层级间通过分隔符“.”进行连接,当读取当分隔符,则说明分隔符后的数据是分隔符前的数据的下一层级。示例性的,key1.key2指的是key2的全路径键名,key1指的是key1的全路径键名。
如图3所示,基于第一全路径键名以及第二全路径键名的映射关系表示为:
在本实施例中,通过层级解析的方式将键名以分隔符做分隔的全路径名表示,在获取对应的键名时只需要从分隔符个数就能知道层级数,就能获取对应层级的键名。例如object.username的分隔符个数为1,层数就是2,获取第二层的值name,即为键名。
具体地,转换所述第一全路径键名或所述第二全路径键名的方式包括:在所述接口键名或所述目标键名包含JSON对象的层级结构的情况下,列出所有层级,并且层级之间采用分隔符分割,生成对应的所述第一全路径键名、所述第二全路径键名,在所述接口键名或所述目标键名不包含JSON对象的层级结构的情况下,将所述接口键名作为所述第一全路径键名、将所述目标键名作为所述第二全路径键名。
在其中一个可行实施例中,“所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对”包括:通过读取所述分隔符获取第一全路径的所有层级;根据层级数调用相应次数的层级以获取所述目标键名,以任意值作为预填充项填充至键值字段中,生成以所述目标键名为键名、以所述任意值为键值的键值对。
具体地,如图4所示,本实施例以object作为预填充项,本实施例通过对映射关系中的第二全路径键名进行解析,以分隔符判断每个第二全路径键名是否只有一个层级,示例性的,分隔符为“.”,获取映射关系对象的第一个键值对,得到其键值success,因该键值没有“.”分隔,证明只有一个层级,故该键值对应的结构为{"success":Object};解析第二个键值对,得到其键值data.name,发现其有层级,判断第一层级是否存在data,发现没有存在,故创建第一层级data,然后在data的下一层级建立name,故该键值对应的结构为{"data":{"name":Object}};使用同样的方法进行解析,直至所有的键值解析完成,获得第二数据结构。
如图5所示,本方案在格式转换时,获取接口数据的第一个键值对,获取其键名为status,然后找到数据解析结果对象中定义的该键名的对象{"key":"status","javaType":"Boolean","children":null}、然后得到其Java数据类型为Boolean,没有children,故直接获取该键值,通过映射关系对象得知需要转化为success,故存入第二数据结构的success键值对中,生成{"success":true,"data":{"name":Object,"city":Object,"country":Object,"mobile":Object}},第一个键值对解析完成;解析第二个键值对,获取其键名为object,然后找到数据解析结果对象中定义的该键名的对象{"key":"object","javaType":"JSONObject","children":[{"key":"username","javaType":"String","children":null},{"key":"address","javaType":"String","children":null},{"key":"nation","javaType":"String","childr en":null},{"key":"phone","javaType":"String","children":null}]},然后得到其Java数据类型为JSONObject,含有children,故解析该键名的下一层级的对象;获取其第一个键值对,获取其键名为username,然后找到数据解析结果对象中定义的该键名的对象{"key":"username","javaType":"String","children":null}、然后得到其Java数据类型为String,没有children,故直接获取该键值,通过映射关系对象得知需要转化为data.name,故存入第二数据结构的data.name键值对中,生成{"success":true,"data":{"name":"zhangsan","city":Object,"country":Object,"mobile":Object}},该一个键值对解析完成;使用同样的方法进行解析,直至所有的键值对解析完成,转换得到最终的目标数据。
在其中一个可行实施例中,所述方法还包括:当所述接口键名和/或所述目标键名发生变动后,对所述映射关系对象进行更新,以更新后的所述映射关系对象对变动后的所述接口键名和/或变动后的所述目标键名进行转换。
示例性地,接口返回字段中username变成了username1,只需要将映射关系对象里面的object.username改成object.username1,即可在不变更代码的情况下,完成接口格式的重新对接的需求;这对用户来说是完全无感的,对开发团队来说也是完全不需要增加额外的开发工作量。
在其中一个可行实施例中,所述方法还包括:将所述接口键名存入接口数据键名字段中,将所述键值类型存入接口数据键值字段中,将每一当前的所述接口键名的下一层级的解析结构存入下一层级结构字段中,生成将所述接口数据以层级形式表示的解析结果对象,将所述解析结果对象、所述映射关系对象、所述第二数据结构分别存入接口字段、关系字段、目标字段所对应的值中,并分配基于每一所述接口字段、每一所述关系字段、每一所述目标字段的唯一标识符,得到接口默认转化规则对象;在下次接入接口前,先判断所述接口是否携带所述唯一标识符,在判断为是的情况下,根据所述唯一标识符从所述接口默认转换规则对象中查询相对应的所述接口字段、所述关系字段、所述目标字段所对应的值,得到所述解析结果对象、所述映射关系对象、所述第二数据结构,并基于所述解析结果对象、所述映射关系对象、所述第二数据结构生成目标数据。
具体地,该实施例适用场景如下:当频繁接入接口获取动态数据时,根据唯一标识来判断该接口是否已在上次接入,若已接入过,则说明在此之前已进行过接口数据格式转换,因此直接获取到存储的接口默认转换规则对象,无需再对接口数据以及目标数据进行读取以及解析。
在该实施例中,为接口默认转换规则对象分配唯一标识符,并基于该唯一标识符为接口打上标记,当同样的接口再次接入时,可以根据是否打上标记判断是否已在上次接入过,若能够在数据库中查询到该唯一标识符对应的接口默认转换规则对象,并解析得到其中的解析结果对象、映射关系对象、第二数据结构对接口数据进行格式的转换,无需对接口数据以及目标数据再进行解析,使得开发效率显著提升。本申请的区别之处在于,可以通过为接口打上唯一标识符的标记使得在接口接入前就直接判断出接口所提供的数据格式,无需在接入接口后判断,提高了效率。
综上,本方案提供了一种接口数据格式转化方法,具体地流程图如图6所示,该方法包括:
S601、获取接口数据。
S602、通过接口数据解析方法对接口数据进行解析,得到数据解析结果对象。
S603、判断是否存在接口默认转化规则对象,若否,配置转化关系,若是直接获取到字段映射关系对象;
S604、将字段映射关系对象通过第二数据结构解析方法解析得到第二数据结构。
S605、基于第二数据结构采用目标数据创建方法生成目标数据。
在步骤S602中,接口数据解析方法包括:
通过JSON解析将接口数据转化成JSON对象,获取其键名以及键值;
遍历JSON对象的每一个键值对,获取键名存入第一数据结构的接口数据键名字段中;
通过Java原生方法获取键值对中的键值的Java对象类型,将其存入第一数据结构的接口数据键值类型字段中;
判断键值的Java对象类型,如果非JSON对象或者JSON数组,则完成该键值对的解析,进行下一个键值对的解析;
如果为JSON对象或者JSON数组,则使用接口数据解析方法解析JSON对象或者JSON数组中的第一个JSON对象,将解析结果存入的接口数据下级数据结构字段中;直至最后一个键值的Java对象类型不是JSON对象或者JSON数组。
该解析直至所有键值对解析完成为止,得到最终的接口数据解析结果对象。
在步骤S603中,判断是否存在接口默认转化规则对象包括:
将第一数据结构、字段映射关系对象以及目标数据格式存入相对应的字段中,并且自定义一个标记存入转化规则标记字段,生成接口默认转化规则对象。
字段映射关系对象的生成方法包括:
定义多个键值对,一个键值对代表的是一个具体的转化关系-接口数据的目标字段转化成目标数据的目标字段;
每个键值对的键名定义的是接口数据的目标字段的全路径键名,键值定义的是目标数据的目标字段的全路径键名;
键名的定义规则为:接口数据的目标字段所在的键名,如果包含JSON对象的层级结构,则列出所有层级,层级之间使用“.”分隔。
键值的定义规则为:目标数据的目标字段所在的键名,如果包含JSON对象的层级结构,则列出所有层级,层级之间使用“.”分隔。
当设置好所有的键值对之后,将生成字段映射关系对象。
在步骤S604中,第二数据结构解析方法包括:
获取字段映射关系对象的所有键值对,解析每一个键值对的键值;
通过“.”分隔获取其键值的层级,如果没有“.”则该键值只有一个层级,键值为第一层级的值;
遍历键值的层级,根据该层级的值去创建第二数据结构中对应层级的键名;
如果第二数据结构中对应层级的键名不存在,则创建对应层级的键名,如果存在,则跳过并进入下一个层级的创建或者下一个键值对的创建。
遍历解析直至最后一个键值对解析完成,得到第二数据结构。
在步骤S605中,目标数据创建方法,包括:
遍历接口数据JSON对象的键名,与接口数据解析结果对象中的所有接口数据键名字段的值相匹配,如果找到该字段,则获取接口数据键值类型字段的值,根据其值判断为JSON对象类型、JSON数组类型还是其他类型。
如果是其他类型,则获取接口数据JSON对象该键名对应的键值,存入第二数据结构对应的键值当中去。
如果是JSON对象类型或者是JSON数组类型,则获取接口数据JSON对象该键名对应的下一层级的JSON对象或者JSON数组的第一个JSON对象,以及第一数据结构的接口数据下级数据结构字段,再次使用同样的方式获取其键值以及键名存入第二数据结构中。
直至接口数据JSON对象的所有键名解析完成,生成最终的目标数据。
基于上述方法,本申请能够对接口数据以及目标数据的层级进行解析,并将解析结果以全路径键名的方式表示,通过全路径键名中的分隔符区分对象的层级,分别以接口数据解析结果:第一全路径键名以及目标数据解析结果:第二全路径键名建立转化规则,对于同样数据格式的接口,无需额外配置,即可通过转化规则完成接口的数据格式转化。在接口数据格式变更的情况下,只需要修改转换规则中第一全路径键名以及第二全路径键名,在不修改前后端代码的情况下,即可完成新数据结构的对接。对于前段前端而言,在对接不同接口时无需关注接口数据格式,接口数据会自动转化为前段前端所需要的目标格式,前段前端只需要使用默认的方式就能获取到所需目标数据,大大提高了开发效率。
实施例二
本申请还提出了一种接口数据格式转换装置,参考图7,包括:
数据获取模块701,用于获取接口数据,其中,所述接口数据包括接口键名、接口键值。
键值获取模块702,用于在所述接口数据对应有第一数据结构的情况下,从所述第一数据结构中解析得到所述接口键值所对应的键值类型,根据所述键值类型获取所述接口键值。
数据结构解析模块703,用于对所述目标键名进行解析,生成第二数据结构,其中,所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对。
键名转换模块704,用于生成基于所述接口键名与所述目标键名的映射关系对象,基于所述映射关系对象将所述接口键名对应的所述接口数据的所述接口键值存入所述第二数据结构的键值中,生成目标数据。
实施例三
本实施例还提供了一种电子装置,参考图8,包括存储器804和处理器802,该存储器804中存储有计算机程序,该处理器802被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
具体地,上述处理器802可以包括中央处理器(CPU),或者特定集成电路(ApplicationSpecificIntegratedCircuit,简称为ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
其中,存储器804可以包括用于数据或指令的大容量存储器804。举例来说而非限制,存储器804可包括硬盘驱动器(HardDiskDrive,简称为HDD)、软盘驱动器、固态驱动器(SolidStateDrive,简称为SSD)、闪存、光盘、磁光盘、磁带或通用串行总线(UniversalSerialBus,简称为USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器804可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器804可在数据处理装置的内部或外部。在特定实施例中,存储器804是非易失性(Non-Volatile)存储器。在特定实施例中,存储器804包括只读存储器(Read-OnlyMemory,简称为ROM)和随机存取存储器(RandomAccessMemory,简称为RAM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(ProgrammableRead-OnlyMemory,简称为PROM)、可擦除PROM(ErasableProgrammableRead-OnlyMemory,简称为EPROM)、电可擦除PROM(ElectricallyErasableProgrammableRead-OnlyMemory,简称为EEPROM)、电可改写ROM(ElectricallyAlterableRead-OnlyMemory,简称为EAROM)或闪存(FLASH)或者两个或更多个以上这些的组合。在合适的情况下,该RAM可以是静态随机存取存储器(StaticRandom-AccessMemory,简称为SRAM)或动态随机存取存储器(DynamicRandomAccessMemory,简称为DRAM),其中,DRAM可以是快速页模式动态随机存取存储器804(FastPageModeDynamicRandomAccessMemory,简称为FPMDRAM)、扩展数据输出动态随机存取存储器(ExtendedDateOutDynamicRandomAccessMemory,简称为EDODRAM)、同步动态随机存取内存(SynchronousDynamicRandom-AccessMemory,简称SDRAM)等。
存储器804可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器802所执行的可能的计算机程序指令。
处理器802通过读取并执行存储器804中存储的计算机程序指令,以实现上述实施例中的任意一种接口数据格式转换方法。
可选地,上述电子装置还可以包括传输设备806以及输入输出设备808,其中,该传输设备806和上述处理器802连接,该输入输出设备808和上述处理器802连接。
传输设备806可以用来经由一个网络接收或者发送数据。上述的网络具体实例可包括电子装置的通信供应商提供的有线或无线网络。在一个实例中,传输设备包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备806可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
输入输出设备808用于输入或输出信息。在本实施例中,输入的信息可以是获取的第三方数据源载入的接口数据等,输出的信息可以是转换后的目标数据等。
可选地,在本实施例中,上述处理器402可以被设置为通过计算机程序执行以下步骤:
S101、获取接口数据,其中,所述接口数据包括接口键名、接口键值。
S102、所述接口数据对应有第一数据结构,从所述第一数据结构中解析得到所述接口键值所对应的键值类型,根据所述键值类型获取所述接口键值。
S103、获取目标键名,对所述目标键名进行解析,生成第二数据结构,其中,所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对。
S104、生成基于所述接口键名与所述目标键名的映射关系对象,基于所述映射关系对象将所述接口键名对应的所述接口数据的所述接口键值存入所述第二数据结构的键值中,生成目标数据。
需要说明的是,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
通常,各种实施例可以以硬件或专用电路、软件、逻辑或其任何组合来实现。本发明的一些方面可以以硬件来实现,而其他方面可以以可以由控制器、微处理器或其他计算设备执行的固件或软件来实现,但是本发明不限于此。尽管本发明的各个方面可以被示出和描述为框图、流程图或使用一些其他图形表示,但是应当理解,作为非限制性示例,本文中描述的这些框、装置、系统、技术或方法可以以硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备或其某种组合来实现。
本发明的实施例可以由计算机软件来实现,该计算机软件由移动设备的数据处理器诸如在处理器实体中可执行,或者由硬件来实现,或者由软件和硬件的组合来实现。包括软件例程、小程序和/或宏的计算机软件或程序(也称为程序产品)可以存储在任何装置可读数据存储介质中,并且它们包括用于执行特定任务的程序指令。计算机程序产品可以包括当程序运行时被配置为执行实施例的一个或多个计算机可执行组件。一个或多个计算机可执行组件可以是至少一个软件代码或其一部分。另外,在这一点上,应当注意,如图中的逻辑流程的任何框可以表示程序步骤、或者互连的逻辑电路、框和功能、或者程序步骤和逻辑电路、框和功能的组合。软件可以存储在诸如存储器芯片或在处理器内实现的存储块等物理介质、诸如硬盘或软盘等磁性介质、以及诸如例如DVD及其数据变体、CD等光学介质上。物理介质是非瞬态介质。
本领域的技术人员应该明白,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (12)
1.一种接口数据格式转换方法,其特征在于,包括以下步骤:
获取接口数据,其中,所述接口数据包括接口键名、接口键值;
所述接口数据对应有第一数据结构,从所述第一数据结构中解析得到所述接口键值所对应的键值类型,根据所述键值类型获取所述接口键值;
获取目标键名,对所述目标键名进行解析,生成第二数据结构,其中,所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对;
生成基于所述接口键名与所述目标键名的映射关系对象,基于所述映射关系对象将所述接口键名对应的所述接口数据的所述接口键值存入所述第二数据结构的键值中,生成目标数据。
2.根据权利要求1所述的接口数据格式转换方法,其特征在于,所述第一数据结构包括键名类型、所述键值类型以及下级数据结构,其中,所述键名类型表示为所述接口数据的键值Java对象类型,所述键值类型表示为所述接口数据的键值Java对象类型,所述下级数据结构表示为所述接口键名的下一层级对象数据结构。
3.根据权利要求1所述的接口数据格式转换方法,其特征在于,所述接口键名的获取步骤包括:
遍历所述接口数据的每个键值对,获取第一键名,根据键值类型确认所述第一键名是否包括JSON数据,在所述第一键名包含JSON数据的情况下,获取各JSON数据的第二键名,确定所述接口键名包括所述第一键名以及所述第二键名。
4.根据权利要求1所述的接口数据格式转换方法,其特征在于,“生成基于所述接口键名与所述目标键名一对一的映射关系对象”包括:
分别将所述接口键名转换成第一全路径键名以及将所述目标键名转换成第二全路径键名;
将所述第一全路径键名与所述第二全路径键名一一对应得到所述接口键名与所述目标键名一对一的映射关系。
5.根据权利要求4所述的接口数据格式转换方法,其特征在于,转换所述第一全路径键名或所述第二全路径键名的方式包括:
在所述接口键名或所述目标键名包含JSON对象的层级结构的情况下,列出所有层级,并且层级之间采用分隔符分割,生成对应的所述第一全路径键名、所述第二全路径键名,
在所述接口键名或所述目标键名不包含JSON对象的层级结构的情况下,将所述接口键名作为所述第一全路径键名、将所述目标键名作为所述第二全路径键名。
6.根据权利要求5所述的接口数据格式转换方法,其特征在于,“所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对”包括:
通过读取所述分隔符获取第一全路径的所有层级;
根据层级数调用相应次数的层级以获取所述目标键名,以任意值作为预填充项填充至键值字段中,生成以所述目标键名为键名、以所述任意值为键值的键值对。
7.根据权利要求1所述的接口数据格式转换方法,其特征在于,所述方法还包括:
当所述接口键名和/或所述目标键名发生变动后,对所述映射关系对象进行更新,以更新后的所述映射关系对象对变动后的所述接口键名和/或变动后的所述目标键名进行转换。
8.根据权利要求1所述的接口数据格式转换方法,其特征在于,所述方法还包括:
将所述接口键名存入接口数据键名字段中,将所述键值类型存入接口数据键值字段中,将每一当前的所述接口键名的下一层级的解析结构存入下一层级结构字段中,生成将所述接口数据以层级形式表示的解析结果对象,将所述解析结果对象、所述映射关系对象、所述第二数据结构分别存入接口字段、关系字段、目标字段所对应的值中,并分配基于每一所述接口字段、每一所述关系字段、每一所述目标字段的唯一标识符,得到接口默认转化规则对象;
在下次接入接口前,先判断所述接口是否携带所述唯一标识符,在判断为是的情况下,根据所述唯一标识符从所述接口默认转换规则对象中查询相对应的所述接口字段、所述关系字段、所述目标字段所对应的值,得到所述解析结果对象、所述映射关系对象、所述第二数据结构,并基于所述解析结果对象、所述映射关系对象、所述第二数据结构生成目标数据。
9.一种接口数据格式转换装置,其特征在于,包括:
数据获取模块,用于获取接口数据,其中,所述接口数据包括接口键名、接口键值;
键值获取模块,用于在所述接口数据对应有第一数据结构的情况下,从所述第一数据结构中解析得到所述接口键值所对应的键值类型,根据所述键值类型获取所述接口键值;
数据结构解析模块,用于对所述目标键名进行解析,生成第二数据结构,其中,所述第二数据结构包括以所述目标键名为键名、以任意值为键值的键值对;
键名转换模块,用于生成基于所述接口键名与所述目标键名的映射关系对象,基于所述映射关系对象将所述接口键名对应的所述接口数据的所述接口键值存入所述第二数据结构的键值中,生成目标数据。
10.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1至8任一项所述的接口数据格式转换方法。
11.一种计算机程序产品,其特征在于,包括软件代码部分,当所述计算机程序产品在计算机上被运行时,所述软件代码部分用于执行根据权利要求1至8任一项所述的接口数据格式转换方法。
12.一种可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序,所述计算机程序包括用于控制过程以执行过程的程序代码,所述过程包括根据权利要求1至8任一项所述的接口数据格式转换方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111229125.8A CN113918635A (zh) | 2021-10-21 | 2021-10-21 | 接口数据格式转换方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111229125.8A CN113918635A (zh) | 2021-10-21 | 2021-10-21 | 接口数据格式转换方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113918635A true CN113918635A (zh) | 2022-01-11 |
Family
ID=79242253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111229125.8A Pending CN113918635A (zh) | 2021-10-21 | 2021-10-21 | 接口数据格式转换方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113918635A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113934735A (zh) * | 2021-12-15 | 2022-01-14 | 深圳市城市交通规划设计研究中心股份有限公司 | 处理数据的方法及装置 |
CN114500690A (zh) * | 2022-02-15 | 2022-05-13 | 平安科技(深圳)有限公司 | 接口数据处理方法、装置、电子设备及存储介质 |
CN115858457A (zh) * | 2023-02-09 | 2023-03-28 | 中航金网(北京)电子商务有限公司 | 文件转换方法、装置及电子设备 |
-
2021
- 2021-10-21 CN CN202111229125.8A patent/CN113918635A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113934735A (zh) * | 2021-12-15 | 2022-01-14 | 深圳市城市交通规划设计研究中心股份有限公司 | 处理数据的方法及装置 |
CN114500690A (zh) * | 2022-02-15 | 2022-05-13 | 平安科技(深圳)有限公司 | 接口数据处理方法、装置、电子设备及存储介质 |
CN114500690B (zh) * | 2022-02-15 | 2023-08-18 | 平安科技(深圳)有限公司 | 接口数据处理方法、装置、电子设备及存储介质 |
CN115858457A (zh) * | 2023-02-09 | 2023-03-28 | 中航金网(北京)电子商务有限公司 | 文件转换方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113918635A (zh) | 接口数据格式转换方法和装置 | |
CN111596965B (zh) | 项目工程初始化方法、装置、计算机设备和存储介质 | |
TWI354900B (en) | Method, system, and computer program product for a | |
KR101355273B1 (ko) | 컴퓨팅 시스템 및 그 실행 제어 방법과, 그 실행 제어 프로그램을 기록한 기록 매체 | |
US10922216B1 (en) | Intelligent automation test workflow | |
CN106547646B (zh) | 一种数据备份及恢复方法、数据备份及恢复装置 | |
CN112769706A (zh) | 组件化路由方法及系统 | |
CN112615759A (zh) | 全链路压测组件、全链路压测方法及装置 | |
CN117112060A (zh) | 组件库构建方法、装置、电子设备及存储介质 | |
CN111078319B (zh) | 配置数据管理方法、装置、存储介质和计算机可读介质 | |
CN111240987B (zh) | 移植程序检测方法、装置、电子设备及计算机可读存储介质 | |
CN111259619A (zh) | 配置对象的控制方法、装置、存储介质及验证平台 | |
CN115964054A (zh) | 应用服务部署方法和装置 | |
CN113568603B (zh) | 组件对象创建及接口方法调用方法、终端及存储装置 | |
CN115686535A (zh) | 一种Kubernetes集群的巡检方法、装置及应用 | |
CN108334313A (zh) | 用于大型soc研发的持续集成方法、装置及代码管理系统 | |
CN110471708B (zh) | 基于可重用组件的配置项获取的方法及装置 | |
CN113791766A (zh) | 组合数据接口的方法、电子设备和可读存储介质 | |
CN112363700A (zh) | 智能合约的协同创建方法、装置、计算机设备和存储介质 | |
CN117311724A (zh) | Tosca解析的实现方法、Tosca解析器及介质 | |
WO2023249627A1 (en) | Dynamic application of schema framework for inventory management | |
US20230110520A1 (en) | Ui service package generation and registration method and apparatus, and ui service loading method and apparatus | |
US20240028309A1 (en) | System and method for generating package for a low-code application builder | |
JP7119448B2 (ja) | 情報処理装置及び情報処理プログラム | |
CN117519814A (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 |