数据结构的转换方法、装置、计算机设备和存储介质与流程

文档序号:17477304发布日期:2019-04-20 06:12阅读:196来源:国知局
数据结构的转换方法、装置、计算机设备和存储介质与流程

本申请涉及计算机技术领域,特别是涉及一种数据结构的转换方法、装置、计算机设备和存储介质。



背景技术:

xml(extensiblemarkuplanguage,可扩展标记语言)是一种由sgml(standardgeneralizedmarkuplanguage,标准通用标记语言)衍生而来的简单的、灵活的文本格式。

由于xml的各种良好特性,将会有越来越多的数据以xml的格式保存和传输。在很多应用场合中需要xml文档转换成其他格式的文档,例如,构建网站时需要把xml转换成常见的html文档,在电子商务中,企业间通过xml文档交换数据,但在接收数据后就可能先要把xml文件转换成企业内部的数据格式。

对于同一种的数据结构,不同用户、不同时期之间设计的xml文档的数据层次关系及元素命名都会有所不同,xml文档之间同样存在数据结构转换的问题;与xml文档类似的还有json格式的文档,json格式的文档之间也存在数据结构转换的问题;进一步地,不同数据结构的文档也可以相互转换,如将xml文档转换为json格式的文档;无论是同种数据结构的文档或不同种数据结构的文档之间的转换,都需要编写某种特定的应用程序,或者使用某种特定的工具才能够进行转换,步骤比较繁琐,花费时间长,降低了用户的使用便利性。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够提高数据结构转换过程中用户的使用便利性的数据结构的转换方法、装置、计算机设备和存储介质。

一种数据结构的转换方法,所述方法包括:

获取第一数据结构数据及映射脚本;

调用特定应用程序编程接口解析所述映射脚本,获得语法树对象;

将所述第一数据结构数据输入至所述语法树对象;

遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据。

在其中一个实施例中,所述映射脚本包括属于第一数据结构类型的输入变量和属于第二数据结构类型的输出变量,分别用于存储第一数据结构数据和第二数据结构数据;第一数据结构数据的数据结构类型及第二数据结构数据的数据结构类型相同或不同。

在其中一个实施例中,所述数据结构类型包括有向无环图结构或可等价转换为有向无环图结构的数据结构类型;所述有向无环图结构或可等价转换为有向无环图结构的数据结构类型包括javascript对象表示法、可扩展标记语言、对象图导航语言、map、multivaluedmap、快捷健康互操作资源中的至少一种。

在其中一个实施例中,所述遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据,包括:

将所述第一数据结构数据解析为对应的列表数据,并赋值至所述输入变量;

根据所述映射脚本对应的映射规则对所述输入变量中的数据进行映射,生成目标数据;

将所述目标数据赋值至所述输出变量;

将输出变量中的目标数据转换为第二数据结构数据。

一种数据结构的转换装置,所述装置包括:

获取模块,用于获取第一数据结构数据及映射脚本;

调用模块,用于调用特定应用程序编程接口解析所述映射脚本,获得语法树对象;

输入模块,用于将所述第一数据结构数据输入至所述语法树对象;

转换模块,用于遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

获取第一数据结构数据及映射脚本;

调用特定应用程序编程接口解析所述映射脚本,获得语法树对象;

将所述第一数据结构数据输入至所述语法树对象;

遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

获取第一数据结构数据及映射脚本;

调用特定应用程序编程接口解析所述映射脚本,获得语法树对象;

将所述第一数据结构数据输入至所述语法树对象;

遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据。

上述数据结构的转换方法、装置、计算机设备和存储介质,通过获取第一数据结构数据及映射脚本;调用特定api解析所述映射脚本,获得语法树对象;将所述第一数据结构数据输入至所述语法树对象;遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据;实现多种格式的数据结构内部实例间的转换;为多种不同或相同格式的有向无环图或与有向无环图等价的数据结构之间的转换提供了一套全面、灵活且易用的解决方案;没有对源格式、目标格式及转换方向的限制,大大提高了灵活性和泛用性。

附图说明

图1是一个实施例的一种数据结构的转换方法的应用设备图;

图2是一个实施例的一种数据结构的转换方法的流程示意图;

图3是一个实施例的一种生成第二数据结构数据的流程示意图;

图4是一个实施例的一种映射脚本中变量初始取值和数据结构情况示意图;

图5是一个实施例的一种映射脚本中变量和别名取值、元素对应关系、执行逻辑和数据结构情况示意图;

图6是一个实施例的一种映射脚本中变量和别名取值、元素对应关系、执行逻辑和数据结构情况示意图;

图7是一个实施例的一种映射脚本中变量和别名取值、元素对应关系、执行逻辑和数据结构情况示意图;

图8是一个实施例的一种映射脚本中变量最终取值、元素对应关系和数据结构情况示意图;

图9是一个实施例的一种数据结构的转换装置的结构框图;

图10是一个实施例的一种计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的数据结构的转换方法,可以应用于如图1所示的设备中。其中,所述设备可以包括终端102,所述终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,该终端102的操作系统可以包括windows、linux、android(安卓)、ios、windowsphone等等,本实施例对此不作限制。

在一个实施例中,如图2所示,提供了一种数据结构的转换方法,以该方法应用于终端102为例进行说明,包括以下步骤:

步骤s201,获取第一数据结构数据及映射脚本;

本实施例中,该终端首先可以获取到所述第一数据结构数据及映射脚本;需要说明的是,第一数据结构数据可以以文档数据的形式存在,该第一数据结构数据的数据结构类型可以为某个特定的数据结构。举例而言,该第一数据结构可以包括有向无环图数据结构或者可等价转换为有向无环图的数据结构。

在数据结构中,图(graph)是一种由顶点的有穷非空集合和顶点之间边的集合组成的数据结构;图按照边的有无方向性分为无向图和有向图;在有向图中,无法从某个顶点出发经过若干条边回到该点,则该有向图称为有向无环图;有向无环图(dag,directedacyclicgraph)数据结构主要用于拓扑排序和关键路径操作。

进一步地,所述映射脚本可以为预置的映射脚本,该映射脚本为采用特定映射语言编写的程序,需要说明的是,该映射脚本中可以包括属于第一数据结构类型的输入变量和属于第二数据结构类型的输出变量,分别用于存储第一数据结构数据和第二数据结构数据;第一数据结构数据的数据结构类型及第二数据结构数据的数据结构类型相同或不同。

步骤s202,调用特定api解析所述映射脚本,获得语法树对象;

具体应用到本实施例中,当终端获取到所述第一数据结构数据及映射脚本后,可以调用特定api(applicationprogramminginterface,应用程序编程接口)解析所述映射脚本。

该特定api即为一些预先定义的函数,调用该预先定义的函数解析所述映射脚本,获得相应的语法树对象,该语法树由一系列java对象节点组成,这些节点相互关联,形成树状结构,每个节点表示映射脚本中的一个语法元素。

步骤s203,将所述第一数据结构数据输入至所述语法树对象;

实际应用到本实施例中,终端可以将所述第一数据结构数据输入至所述语法树对象中,以所述第一数据结构数据为输入,执行所述语法树对象;需要说明的是,该第一数据结构数据中的数据结构类型为某个特定的数据结构时;该映射脚本中定义的输入数据的数据结构类型应该是与第一数据结构数据相同的数据结构,两者匹配才能够执行该映射脚本对应的程序。

步骤s204,遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据。

本实施例中,将该第一数据结构数据输入至所述语法树对象后,遍历所述语法树对象,即执行所述该映射脚本对应的程序,将所述第一数据结构数据转换为第二数据结构数据,当转换操作完成后,生成包含第二数据结构数据的第二文档数据;即所述第二数据结构数据同样可以以文档数据的形式存在。

该第二数据结构同样可以包括有向无环图数据结构或者可等价转换为有向无环图的数据结构。

需要说明的是,因为该映射脚本中定义的输出数据的数据结构类型可以是第二数据结构,终端会按照第二数据结构的格式将所述第一文档数据中的第一数据结构数据进行转换,得到第二数据结构数据。

根据本实施例提供的数据结构的转换方法,获取第一数据结构数据及映射脚本;调用特定api解析所述映射脚本,获得语法树对象;将所述第一数据结构数据输入至所述语法树对象;遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据;实现多种格式的数据结构内部实例间的转换;为多种不同或相同格式的有向无环图的数据结构之间的转换提供了一套全面、灵活且易用的解决方案;没有对源格式、目标格式及转换方向的限制,大大提高了灵活性和泛用性。

在另一个实施例中,所述映射脚本包括属于第一数据结构类型的输入变量和属于第二数据结构类型的输出变量,分别用于存储第一数据结构数据和第二数据结构数据;第一数据结构数据的数据结构类型及第二数据结构数据的数据结构类型相同或不同。

在一个具体示例中,该映射脚本可以包括属于第一数据结构类型的输入变量和属于第二数据结构类型的输出变量,分别用于存储第一数据结构数据和第二数据结构数据;该第一数据结构数据的数据结构类型即为所述输入数据的数据结构类型;该第二数据结构数据的数据结构类型即为所述输出数据的数据结构类型。

举例而言,定义该输入数据所属数据结构类型的相关语句为“#source="urn:struct:source"”;而定义输出数据所属数据结构类型的相关语句为“#target="urn:struct:target"”;在映射脚本中分别可以定义输入数据及输出数据的不同数据结构类型。

在另一个实施例中,所述数据结构类型包括json(javascriptobjectnotation,javascript对象表示法)、xml、对象图导航语言ognl(objectgraphicnavigationlanguage,对象图导航语言)、map、multivaluedmap、fhir(快捷健康互操作资源,fasthealthinteroperableresources)中的至少一种。

其中,所述数据结构类型包括有向无环图结构或可等价转换为有向无环图结构的数据结构类型;所述有向无环图结构或可等价转换为有向无环图结构的数据结构类型包括json、xml、ognl、map、multivaluedmap、fhir等格式中的任意一种。

举例而言,当输入数据的数据结构类型为json,而输出数据的数据结构类型为xml,则该定义输入数据所属数据结构类型的相关语句为“#source="urn:json:source"”;而定义该输出数据所属数据结构类型的相关语句为“#target="urn:xml:target"”;在映射脚本中可以定义输入数据及输出数据不同的数据结构类型,实现多种格式的数据结构数据之间的转换,用户可通过增加实现类的方式,添加对其他数据结构以及自定义数据结构的支持。

json是一种轻量级的数据交换格式,其采用完全独立于编程语言的文本格式来存储和表示数据。xml是一种由sgml衍生而来的简单的、灵活的文本格式。ognl是一种表达式语言,其可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。java中的map提供了一个更通用的元素存储方法。map集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。fhir基于一系列被称为“资源”的模块化组件来构建。这些资源能够很容易地组装进工作系统,用来解决现实世界中的临床和管理问题,其定义了一个简单的标准框架,用于扩展和适应已存在的资源。

在另一个实施例中,参照图3,提供了一种生成第二数据结构数据的流程示意图,如图3所示,所述步骤s204包括以下子步骤:

子步骤s11,将所述第一数据结构数据解析为对应的列表数据,并赋值至所述输入变量;

子步骤s12,根据所述映射脚本对应的映射规则对所述输入变量中的数据进行映射,生成目标数据;

子步骤s13,将所述目标数据赋值至所述输出变量;

子步骤s14,将输出变量中的目标数据转换为第二数据结构数据。

实际应用到本实施例中,终端可以将输入数据(即第一数据结构数据)遍历该语法树对象,首先,将该第一数据结构数据解析为对应的列表数据;例如,当输入数据的数据结构类型为json,则第一数据结构数据解析转化为json元素的列表;当输入数据的数据结构类型为xml,则第一数据结构数据解析转化为xml的dom(文档对象模型,documentobjectmodel)节点的列表;将所述列表数据赋值至所述映射脚本的输入变量。

进一步地,将所述输入变量中的数据进行映射,生成目标数据,所述目标数据可以为第二数据结构的数据,具体地,根据所述映射脚本对应的映射规则对输入变量中的数据进行映射,生成目标数据;需要说明的是,所述映射规则为该映射脚本的程序所反映的规则,因不同的数据结构或用户需求而异,本实施例没有必要对此作过多的限制。

实际应用中,再将所述目标数据赋值至所述映射脚本中的输出变量,将所述输出变量中的数据转换为所需的第二数据结构数据;其中,所述输出变量的数据同样以列表数据的形式保存。还可以对现有数据中的结点数据进行增、删、改以及移动、复制、排序等操作。

为了使本领域技术人员更好地理解本实施例,下面以一个具体的示例进行说明。

1.确定需要进行数据转换的第一数据结构和第二数据结构,两者均须为有向无环图或可经等价转换化为有向无环图;

2.获取映射脚本;

3.通过javaapi加载映射脚本;该api可以使用javacc实现,对映射脚本进行编译,转化为相应的语法树对象(该语法树对象为一组java对象;结合输入(第一数据结构)和输出数据(第二数据结构),对其执行语法树对象即为运行该映射脚本描述的程序);

4.向语法树对象添加输入和输出数据,即对映射脚本中定义的输入和输出变量赋值;

5.将上述调用方法作为系统的一个模块,或形成独立的程序;运行系统或程序时,即实现了有向无环图或有向无环图等价结构之间的数据转换。

以如下的映射脚本为例进行数据结构转换的说明:

1.根据映射脚本的定义,将结构名与其定义uri(uniformresourceidentifier,统一资源标识符)值所代表的数据类型相关联;在处理常量、变量、表达式、函数的参数和返回值等节点时,将使用该结点对应的数据结构类型的适配器进行处理;

2.从输入变量src中接受用户给定的输入数据,并按照结构名source(即#source="urn:struct:source"中的source)对应的数据结构类型将输入数据解释为相应的值的数据列表,如:source定义为xml数据类型,则src为xml的dom节点的列表;source定义为json数据类型,则src为json元素的列表;

3.从输出变量tgt中接受用户给定的输出数据,一般为一个或一组空的结点(即对应数据类型的使用默认初始化方式产生的实例,具体语义由各数据类型的适配器决定,即由映射脚本决定);参照图4,示出了本实施例的一种映射脚本中变量初始取值和数据结构情况示意图;如图4所示,src所对应的阴影框表示输入变量的列表数据及其包含的元素,实线连接属性和属性的拥有者,实线上的标签表示属性名。

4.执行迭代部分即@@(){}部分;首先,对迭代头即@@()的括号内部分求值;求值tgt.prop1@()部分,即对于tgt结点值列表中的每个值,新建若干个名为prop1的属性值,其个数为接入点(junction)部分即@()的括号内部分求值结果列表中值的个数;其中,“新建名为prop1的属性值”的语义由target的数据结构类型适配器决定,如:xml为增加名为prop1的属性,或新建名为prop1的子节点;json为对当前json对象,或当前json数组中的每个json对象增加名为prop1的属性;

5.为了进行步骤4,首先对接入点部分src.prop1:src_prop1.prop3:src_prop3求值;首先对链条中的第一段src.prop1:src_prop1求值,即对于src结点值列表中的每个值,取其名为prop1的属性值并依次排列,形成结果结点并标记其别名为src_prop1;然后对链条中的第二段prop3:src_prop3求值,即对于上一步的结果src_prop1值列表中的每个值,取其名为prop3的属性值并依次排列,形成结果结点并标记其别名为src_prop3;参照图5,示出了本实施例的一种映射脚本中变量和别名取值、元素对应关系、执行逻辑和数据结构情况示意图;如图5所示,新增的src_prop1所对应的阴影框与src_prop3所对应的阴影框分别表示别名对应的列表数据及其包含的元素。

6.如步骤4中所述,对于接入点部分求值结果即别名为src_prop3的结点中的每个值,分别在tgt结点下新建名为prop1的属性值并将其依次排列,形成结果结点并标记其别名为tgt_prop1;同时,确定以下对应关系:根据属性的拥有者,确定tgt_prop1与tgt、src_prop1与src、src_prop3与src_prop1这几对结点的值之间的对应关系;根据按照接入点求值结果新建属性值的一对一关系,确定tgt_prop1与src_prop3这对结点值之间的对应关系;至此,迭代头部分求值完成;参照图6,示出了本实施例的一种映射脚本中变量和别名取值、元素对应关系、执行逻辑和数据结构情况示意图;如图6所示,新增的tgt_prop1所对应的阴影框表示别名对应的列表数据及其包含的元素;虚线箭头表示接入点的计算过程,即对于接入点部分求值结果的每个元素分别新建属性值,以及由此确立的一对一关系。

7.对步骤6中所得迭代头部分求值结果tgt_prop1的每个值,执行迭代体部分;在迭代体作用域中,tgt_prop1变量表示当前进行迭代的单个值(实为单值列表);其他与迭代头中出现的变量或别名同名的变量,分别表示从当前迭代值触发,按照步骤6所述对应关系直接或间接对应单个值;

8.执行赋值语句tgt_prop1.prop2=src_prop1.prop2;计算右边部分,对于src_prop1(当前迭代值对应迭代头内同名中间结点的单值列表),取其名为prop2的属性并依次排列,形成结果结点;再计算左边部分,对于tgt_prop1(当前迭代值),将其名为prop2的属性值依次设置为右边求值结果的值;其中,设置名为prop2的属性值“语义由target的数据结构类型适配器决定,具体同上;参照图7,示出了本实施例的一种映射脚本中变量和别名取值、元素对应关系、执行逻辑和数据结构情况示意图;如图7所示,指向prop2及prop3的点线箭头表示赋值操作及方向;深色方形结点表示当前进行迭代的元素;粗边框和粗实线表示与当前进行迭代的元素按照步骤6中所述对应关系关联的各个变量和别名所指的元素(在迭代体里这些变量和别名的值均为单值列表)。

9.同样,执行赋值语句tgt_prop1.prop3=src_prop3;

10.对所有值执行迭代体部分后,映射脚本即执行完毕,通过输出变量tgt向用户提供经过数据转换后的第二数据结构数据;参照图8,示出了本实施例的一种映射脚本中变量最终取值、元素对应关系和数据结构情况示意图。

第一示例:

输入数据(xml格式):

<prop1>

<prop2>abc</prop2>

<prop3>张</prop3>

<prop3>1231</prop3>

<prop3>2.2</prop3>

<prop3>刘</prop3>

<prop3>谢</prop3>

</prop1>

输出数据(xml格式):

<prop1>

<prop2>abc</prop2>

<prop3>张</prop3>

</prop1>

<prop1>

<prop2>abc</prop2>

<prop3>1231</prop3>

</prop1>

<prop1>

<prop2>abc</prop2>

<prop3>2.2</prop3>

</prop1>

<prop1>

<prop2>abc</prop2>

<prop3>刘</prop3>

</prop1>

<prop1>

<prop2>abc</prop2>

<prop3>谢</prop3>

</prop1>

第二示例:

输入数据(json格式):

输出数据(json格式):

第三示例:

输入数据(xml格式):

<prop1>

<prop2>abc</prop2>

<prop3>张</prop3>

<prop3>1231</prop3>

<prop3>2.2</prop3>

<prop3>刘</prop3>

<prop3>谢</prop3>

</prop1>

输出数据(json格式):

第四示例:

输入数据(json格式):

输出数据(xml格式):

<prop1>

<prop2>abc</prop2>

<prop3>张</prop3>

</prop1>

<prop1>

<prop2>abc</prop2>

<prop3>1231</prop3>

</prop1>

<prop1>

<prop2>abc</prop2>

<prop3>2.2</prop3>

</prop1>

<prop1>

<prop2>abc</prop2>

<prop3>刘</prop3>

</prop1>

<prop1>

<prop2>abc</prop2>

<prop3>谢</prop3>

</prop1>

应该理解的是,虽然图2-3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图9所示,提供了一种数据结构的转换装置,包括:获取模块301、调用模块302、输入模块303和转换模块304,其中:

获取模块301,用于获取第一数据结构数据及映射脚本;

调用模块302,用于调用特定应用程序编程接口api解析所述映射脚本,获得语法树对象;

输入模块303,用于将所述第一数据结构数据输入至所述语法树对象;

转换模块304,用于遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据。

在一个实施例中,所述映射脚本包括属于第一数据结构类型的输入变量和属于第二数据结构类型的输出变量,分别用于存储第一数据结构数据和第二数据结构数据;第一数据结构数据的数据结构类型及第二数据结构数据的数据结构类型相同或不同。

在一个实施例中,所述数据结构类型包括有向无环图结构或可等价转换为有向无环图结构的数据结构类型;所述有向无环图结构或可等价转换为有向无环图结构的数据结构类型包括javascript对象表示法json、可扩展标记语言xml、对象图导航语言ognl、map、multivaluedmap、快捷健康互操作资源fhir中的至少一种。

在一个实施例中,所述转换模块包括:

解析子模块,用于将所述第一数据结构数据解析为对应的列表数据,并赋值至所述输入变量;

映射子模块,用于根据所述映射脚本对应的映射规则对所述输入变量中的数据进行映射,生成目标数据;

赋值子模块,用于将所述目标数据赋值至所述输出变量;

转换子模块,用于将输出变量中的目标数据转换为第二数据结构数据。关于数据结构的转换装置的具体限定可以参见上文中对于数据结构的转换方法的限定,在此不再赘述。上述数据结构的转换装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

上述提供的数据结构的转换装置可用于执行上述任意实施例提供的数据结构的转换方法,具备相应的功能和有益效果。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据结构的转换方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:

获取第一数据结构数据及映射脚本;

调用特定应用程序编程接口api解析所述映射脚本,获得语法树对象;

将所述第一数据结构数据输入至所述语法树对象;

遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据。

在一个实施例中,所述映射脚本包括属于第一数据结构类型的输入变量和属于第二数据结构类型的输出变量,分别用于存储第一数据结构数据和第二数据结构数据;第一数据结构数据的数据结构类型及第二数据结构数据的数据结构类型相同或不同。

在一个实施例中,所述数据结构类型包括有向无环图结构或可等价转换为有向无环图结构的数据结构类型;所述有向无环图结构或可等价转换为有向无环图结构的数据结构类型包括javascript对象表示法json、可扩展标记语言xml、对象图导航语言ognl、map、multivaluedmap、快捷健康互操作资源fhir中的至少一种。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:

将所述第一数据结构数据解析为对应的列表数据,并赋值至所述输入变量;

根据所述映射脚本对应的映射规则对所述输入变量中的数据进行映射,生成目标数据;

将所述目标数据赋值至所述输出变量;

将输出变量中的目标数据转换为第二数据结构数据。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

获取第一数据结构数据及映射脚本;

调用特定应用程序编程接口api解析所述映射脚本,获得语法树对象;

将所述第一数据结构数据输入至所述语法树对象;

遍历所述语法树对象,将所述第一数据结构数据进行转换,生成第二数据结构数据。

在一个实施例中,所述映射脚本包括属于第一数据结构类型的输入变量和属于第二数据结构类型的输出变量,分别用于存储第一数据结构数据和第二数据结构数据;第一数据结构数据的数据结构类型及第二数据结构数据的数据结构类型相同或不同。

在一个实施例中,所述数据结构类型包括有向无环图结构或可等价转换为有向无环图结构的数据结构类型;所述有向无环图结构或可等价转换为有向无环图结构的数据结构类型包括javascript对象表示法json、可扩展标记语言xml、对象图导航语言ognl、map、multivaluedmap、快捷健康互操作资源fhir中的至少一种。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:

将所述第一数据结构数据解析为对应的列表数据,并赋值至所述输入变量;

根据所述映射脚本对应的映射规则对所述输入变量中的数据进行映射,生成目标数据;

将所述目标数据赋值至所述输出变量;

将输出变量中的目标数据转换为第二数据结构数据。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1