技术领域
[0001] 本发明涉及数据转换技术领域,具体为一种数据格式转换框架。
相关背景技术
[0002] 数据转换旨在对不同格式的数据进行转换,由源格式转换为目标系统所 需要的目标数据格式。
[0003] 在To B领域的项目开发中,经常会涉及到大量的第三方接口对接及服务 调用。在类似的系统对接当中,往往会遇到数据存储方式不一致、数据格式 不统一等若干问题,造成这些问题的原因如下:
[0004] 1、数据存储方式不一致,在与传统项目对接时,数据的提供方时常会提 供XML格式的数据,在调用方以处理JSON格式数据为主;
[0005] 2、数据字段名称不统一,相同意义的字段,在不同的系统中常有不同的 命名;
[0006] 3、数据结构层级不一致,接口调用中,常常会出现数据结构的层级不一 致,例如在第三方接口中返回两层的JSON数据结构,在调用方数据结构可能 为一层,或是三层;
[0007] 4、数据提供方接口变更,提供服务的数据提供方变更返回数据的存储结 构,造成调用方相应调整。
[0008] 目前针对上述问题,现有的技术解决方案仅能在源代码层面上,针对每 一种数据类型间转换,编写大量的样板代码。但是这样会存在以下主要问题:
[0009] 1、针对每个转换都要编写大量样板代码,代码冗余度过高,当数据转换 场景增加时,冗余度只增不减;
[0010] 2、硬编码实现数据转换部分的代码,若进行后期维护或升级,难度极大;
[0011] 3、格式转换相关代码可读性差,针对一个复杂的数据转换,程序员出错 概率极高;
[0012] 4、由于XML格式不包含数组元素,在与JSON互转时,目前现有的所有 转换工具无法实现语义信息不丢失且格式统一的XML、JSON转换。
[0013] 针对现有现阶段数据转换是通过在代码中定义实体类型、创建大量的实 体对象,并进行属性赋值实现,转化代码可读性差,后期维护成本较高等问 题。本发明人通过选用以JSON格式数据转换为标准,提出一种数据格式转换 方法,定义了数据格式的描述方式,及转换规则,通过规则配置+转换框架相 结合的方式,实现任意的数据格式转换,消除了数据转换所产生的大量样板 代码,也极大提升了代码的可读性。
具体实施方式
[0039] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行 清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而 不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做 出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0040] 实施例
[0041] 请参阅图1-2,本发明提供以下技术方案:一种数据格式转换框架,包括 以下步骤:
[0042] A、输入源数据;
[0043] B、判断源数据是否为JSON格式数据,若是则进行下一步,若不是则将 源数据格式转换成JSON格式数据;若数据格式为XML数据,则需要根据是否 包含标签内属性来进行格式转换操作;
[0044] 其中以示例XML数据为例:
[0045] 示例XML数据如下:
[0046]
[0047] ①若是包含标签内属性,转换成的JSON如下:
[0048]
[0049]
[0050] ②若是不包含标签内属性,转换成的JSON如下:
[0051] {
[0052] "a":[{"d":"aaa"},{"d":"bbb"},{"d":"fff"}]
[0053] }
[0054] 由上可知,不包含标签内属性的XML->JSON转换,结果更加精简,因此 在标签内属性信息不重要的情况下,优先使用不包含标签内属性的XML转换。
[0055] 其中JSON是一种轻量级的数据交换格式,在目前的web开发中作为主流 的数据传递格式广泛应用,开发中涉及到的绝大多数数据转换,都以JSON格 式作为承载方式,使用不同的JSON树结构承载数据;因此,本发明数据转换 框架主要以JSON格式的数据转换为主进行实现,对于其他数据类型,主要为 XML类型数据,XML格式在目前的数据传输当中也有应用,为了兼容XML格式 数据的传输和转换,本发明还实现了XML到JSON的互转方式,因此本发明最 终以JSON格式数据为基础进行转换。
[0056] 针对XML中没有数组的情况,本发明采用了如下原则:
[0057] ①若某节点下存在多个同名子节点,则该子节点翻译为JSON数组;
[0058] ②若制定了某节点为数组节点,则该节点翻译为JSON数组(不管其下是 否存在多个同名子节点);
[0059] ③对于标签内属性,提供包含该属性的转换和不包含该属性的转换两种 方式。
[0060] C、将JSON格式数据中每个节点利用坐标表示,通过坐标定义每一个或 每一种类型的节点;JSON格式数据的节点包括JSON对象数组、JSON常量数 组、JSON对象和JSON常量;其中以示例JSON为例:
[0061] 示例JSON如下:
[0062]
[0063] 根据示例JSON,然后对每个节点以坐标的方式进行表示可以得到如说明 书附图1所示的每个节点坐标表示图。
[0064] D、数据转换引擎根据转换规则对步骤C得到的数据进行数据转换操作; 转换规则包括:
[0065] ①每个JSON转换规则必须存在唯一的根节点。若不存在,则可以手动添 加"r->r"(针对JSON对象)或"r.[->r.["(针对JSON数组)为根节点;
[0066] ②若转换的某个目标JSON节点为数组类型,则该描述规则在该节点下必 须建立子规则节点;
[0067] ③若目标树的某个子节点,某个子节点的某个过程中路径下存在多个子 路径,则该过程中路径节点下必须建立子规则节点;否则,无需针对目标节 点路径中的每个节点建立子规则节点;
[0068] ④转换规则节点可以不存在源节点,但必须存在目标节点,如果不存在 源节点,表示该节点直接在目标节点中创建,在源节点中无对应节点;
[0069] ⑤转换规则当中的任何节点(除根节点),其目标节点必须与上层节点 存在主子关系(下层节点为上层节点的子节点),否则转换规则无效。
[0070] 对于示例JSON,若目标JSON为源JSON的每个key跟后面加上后缀1, 则转换规则如下:
[0071]
[0072] 本发明中,数据转换基于JSON坐标表示和转换规则表示实现,核心转换 时通过数据转换引擎实现,其中数据转换引擎包括数据压缩和数据解压:
[0073] ①数据压缩:
[0074] 基于转换规则,对源JSON进行遍历,并进行信息提取,对目标JSON数 据中存在的数据进行压缩,创建压缩树节点CompressedNode;
[0075] 数据压缩过程中,还进行了路径压缩,例如:对于{“a”:1},若目标JSON 树中a元素的值存在于JSON树的第五层,既为:
[0076] {“a1”:{“a2”:{“a3”:{“a4”:{“a5”:1}}}}}
[0077] 则在压缩树中,只用一个单个节点表示目标路径,以及该路径下元素的 值;
[0078] ②数据解压:
[0079] 数据压缩后得到压缩树CompressedNode节点,若要转换为目标数据格式 的JSON树结构,还需要对压缩树进行解压缩;例如,对于上述的{“a”:1}, 转换为目标数据格式时,需要对中间层的CompressedNode解压缩。将单层的 CompressedNode节点,解压缩为目标的五层JSON树结构,其中整个转换工作 如说明书附图2所示。
[0080] E、得到目标数据并输出。
[0081] 最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限 制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的 技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或 者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作 的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。