数据映射 JSON 格式
JSON 数据格式作为一种开放标准,仍在不断发展,并且被创造性地应用于新的数据交换需求。JSON Lines,定义于 http://jsonlines.org/,是一种方便的文本格式,用于存储结构化数据,其中每条记录占据一行,并且是一个有效的 JSON 对象。JSON Lines 能够处理表格数据,并且能够清晰地识别数据类型,避免歧义。这使得可以逐条处理记录,因此该格式非常适合用于导出和传输数据。
Altova MapForce 支持将 JSON Lines 作为数据源或目标进行数据映射。 让我们来看一个映射项目,该项目从数据库表提取记录,并将这些记录映射到一个 JSON Lines 文件作为输出。

MapForce 支持所有主流数据格式和关系数据库之间的高级数据映射、转换和处理。 举例来说,假设我们被要求创建一个 JSON Lines 文件,其中包含存储在数据库表中的信息,该数据库表最初是为一款移动调查应用程序而创建的。 "Cars" 表是数据库的一部分,该数据库包含来自各种制造商的汽车的型号名称和规格。
将数据映射结果以 JSON Lines 格式作为输出目标
我们完成这个 JSON Lines 数据映射任务的策略很简单:首先,检查现有的数据库表;然后,创建一个小型实例文件,以 JSON Lines 格式表示其中的数据;接下来,在 MapForce 映射设计中,将数据库表中的列映射到 JSON Lines 输出中的相应条目;最后,只需点击 MapForce 输出按钮,即可自动处理整个表,生成输出文件。
我们将使用 Altova MissionKit 中的工具来完成每个步骤。首先,我们将使用 DatabaseSpy 打开数据库,并在表设计视图中查看名为 "Cars" 的表:

该表格包含9列,分别对应JSON字符串和数值数据类型,虽然某些列允许为空值。左侧窗口显示了6266行数据的数量。我们可以通过右键单击上下文菜单来检索前200行数据,以便查看数据内容:

第6行和第7行显示,确实存在一些行包含空值数据。现在我们已经了解了原始数据,我们可以创建一个小型示例文件,用单个JSON格式的行来表示数据结构。XMLSpy的JSON编辑功能提供了一个非常好的工具:

我们的JSON输入在XMLSpy中会进行颜色编码,并且我们可以验证该文件是否格式正确。请注意,我们已将该文件保存为.jsonl格式,以表明它是一种JSON Lines文件。
接下来,我们将打开一个新的 MapForce 数据映射工具,并将数据库表以及 .jsonl 格式的实例文件导入其中:

当我们将 .jsonl 实例文件导入时,MapForce 会自动创建一个 JSON 模式,该模式描述了我们数据中数组中每个单元格可能包含的数据类型。默认模式只描述了一个条目,但我们可以选择该条目,并通过上下文菜单添加重复项,从而创建 8 个额外的子项:

接下来,我们将数据库中的各个字段与JSON数组中每个单元格对应的合适数据类型进行关联,同时,我们将“Cars”表与JSON模式顶部的第一个条目进行关联。 这样配置后,映射工具会为“Cars”表中的每一行创建一个新的输出行。

我们可以点击映射窗口底部的“输出”按钮,将整个表格转换为目标格式并预览结果。但需要注意的是,我们尚未考虑处理空值。如果现在保存输出文件,数据库中的所有空值都将被完全忽略,导致JSON Lines文件中出现字段少于9个的行。这些行在后续处理中将无法准确解读。
包含空数据的 JSON 格式数据映射
MapForce 包含一个过滤器,我们可以使用它来识别和处理空值字段

JSON数组中的单个元素不能同时是数字和空值。过滤器和相关组件规定,"圆柱体"列中的空数据将被映射到第4项中的空值类型。如果该值不是空值,则将被映射到数字类型。我们可以使用相同的过滤器结构来处理所有其他可能包含空值的列。
MapForce 包含一个创建用户自定义函数的功能,这允许我们保存过滤器结构,并在当前映射以及其他包含空值的 JSON 数据映射中重复使用。我们只需选择所需的过滤器和相关组件,然后在“函数”主菜单中选择“创建用户自定义函数”:

用户函数会将选定的组件封装起来,替换掉原始映射中的相应部分,并将该函数添加到函数库中

我们可以直接从库中拖动用户函数,并将其连接到其他允许为空的数据库列。
有时,在将 JSON 数据映射时,将空文本值映射为空字符串可能更合适。MapForce 可以通过使用“替代缺失值”功能来满足这一需求。在下面的图片中,数据库最后一列中的空文本值被映射为空字符串:

以下是完成的数据映射图,其中包含了用于检测空值的用户函数:

请注意,在左侧的“库”窗口中,有一个名为“空值检测器”的用户函数,它已被高亮显示。
现在,既然我们已经考虑了所有可能的空值情况,我们可以点击“输出”按钮来生成 .jsonl 格式的输出文件

请注意,第1675行以及其他一些行既包含空值,也包含空字符串,但第1690行到1691行则完全填充了数据。
对于一次性的转换,该输出文件可以立即保存。如果数据库需要持续更新,并且需要稍后再次进行转换,我们可以将映射关系保存为 MapForce Server 的执行文件,以便使用 MapForce Server 进行自动化处理;或者,我们也可以直接将映射关系部署到 FlowForce Server。
将数据映射关系以 JSON 格式存储在文件中
以下的数据映射示例展示了如何将来自 .jsonl 格式源文件的类似数据集映射到数据库表中。

为了使这个版本更清晰,我们使用 XMLSpy 编辑了 JSON 模式,为数组中的每个单元格添加了描述,并删除了无效的数据类型。点击此映射的“输出”按钮,将生成一个 SQL 脚本,用于将数据加载到数据库表中。
请注意,所有空值项都不需要从源端到目标端的连接。 任何必要的空值都会自动插入到数据库表中,就像第18行所示的那样:

下载免费试用版,其中包含教程、帮助文档以及大量示例,帮助您快速上手,用于您的数据映射、JSON Lines或其他数据映射、转换和处理项目!