---
title: 数据映射 JSON 格式
date: 2020-02-24
categories:
  - data-integration
  - database-mapping
  - json
tags:
  - data-mapping
  - database-mapping
  - json-lines
  - json-mapping
  - mapforce
description: Altova MapForce 支持将 JSON Lines 作为数据源或目标进行映射。例如，它可以从数据库中提取记录，并将这些记录映射到 .jsonl 格式作为输出。
---
Status: #blog

Tags:  #data-mapping #database-mapping #json-lines #json-mapping #mapforce

Categories: [data-integration](/blog/zh/category/data-integration.md) | [data-integration](/blog/zh/category/data-integration.md) | [json](/blog/zh/category/json.md)
# 数据映射 JSON 格式

JSON 数据格式作为一种开放标准，仍在不断发展，并且被创造性地应用于新的数据交换需求。JSON Lines，定义于 [http://jsonlines.org/](http://jsonlines.org/)，是一种方便的文本格式，用于存储结构化数据，其中每条记录占据一行，并且是一个有效的 JSON 对象。JSON Lines 能够处理表格数据，并且能够清晰地识别数据类型，避免歧义。这使得可以逐条处理记录，因此该格式非常适合用于导出和传输数据。

Altova MapForce 支持将 JSON Lines 作为数据源或目标进行数据映射。 让我们来看一个映射项目，该项目从数据库表提取记录，并将这些记录映射到一个 JSON Lines 文件作为输出。

![](/blog/images/JSON_mapping.jpg)

<!--more-->

MapForce 支持所有主流数据格式和关系数据库之间的[高级数据映射、转换和处理](https://www.altova.com/zh/mapforce)。 举例来说，假设我们被要求创建一个 JSON Lines 文件，其中包含存储在数据库表中的信息，该数据库表最初是为一款移动调查应用程序而创建的。 "Cars" 表是数据库的一部分，该数据库包含来自各种制造商的汽车的型号名称和规格。

### **将数据映射结果以 JSON Lines 格式作为输出目标**

我们完成这个 JSON Lines 数据映射任务的策略很简单：首先，检查现有的数据库表；然后，创建一个小型实例文件，以 JSON Lines 格式表示其中的数据；接下来，在 MapForce 映射设计中，将数据库表中的列映射到 JSON Lines 输出中的相应条目；最后，只需点击 MapForce 输出按钮，即可自动处理整个表，生成输出文件。

我们将使用 Altova MissionKit 中的工具来完成每个步骤。首先，我们将使用 DatabaseSpy 打开数据库，并在表设计视图中查看名为 "Cars" 的表：

[![用于数据映射的 JSON 格式数据源数据库表](/blog/images/table-design-view.png)](table-design-view.png)

该表格包含9列，分别对应JSON字符串和数值数据类型，虽然某些列允许为空值。左侧窗口显示了6266行数据的数量。我们可以通过右键单击上下文菜单来检索前200行数据，以便查看数据内容：

[![数据库表中用于数据映射的 JSON 格式数据](/blog/images/table-contents-1.png)](table-contents-1.png)

第6行和第7行显示，确实存在一些行包含空值数据。现在我们已经了解了原始数据，我们可以创建一个小型示例文件，用单个JSON格式的行来表示数据结构。XMLSpy的[JSON编辑功能](https://www.altova.com/zh/xmlspy-xml-editor#json_editor)提供了一个非常好的工具：

[![JSON Lines 格式的数据映射示例文件](/blog/images/jsonl-instance.png)](jsonl-instance.png)

我们的JSON输入在XMLSpy中会进行颜色编码，并且我们可以验证该文件是否格式正确。请注意，我们已将该文件保存为.jsonl格式，以表明它是一种JSON Lines文件。

接下来，我们将打开一个新的 MapForce 数据映射工具，并将数据库表以及 .jsonl 格式的实例文件导入其中：

[![全新设计：JSON Lines 数据映射](/blog/images/new-data-mapping.png)](new-data-mapping.png)

当我们将 .jsonl 实例文件导入时，MapForce 会自动创建一个 JSON 模式，该模式描述了我们数据中数组中每个单元格可能包含的数据类型。默认模式只描述了一个条目，但我们可以选择该条目，并通过上下文菜单添加重复项，从而创建 8 个额外的子项：

[![用于数据映射的 JSON 格式，包含 9 个字段](/blog/images/data-mapping-2.png)](data-mapping-2.png)

接下来，我们将数据库中的各个字段与JSON数组中每个单元格对应的合适数据类型进行关联，同时，我们将“Cars”表与JSON模式顶部的第一个条目进行关联。 这样配置后，映射工具会为“Cars”表中的每一行创建一个新的输出行。

[![将数据库源连接到输出目标数据](/blog/images/data-mapping-3.png)](data-mapping-3.png)

我们可以点击映射窗口底部的“输出”按钮，将整个表格转换为目标格式并预览结果。但需要注意的是，我们尚未考虑处理空值。如果现在保存输出文件，数据库中的所有空值都将被完全忽略，导致JSON Lines文件中出现字段少于9个的行。这些行在后续处理中将无法准确解读。

### 包含空数据的 JSON 格式数据映射

MapForce 包含一个过滤器，我们可以使用它来识别和处理空值字段

[![处理 JSON 数据映射中的空值](/blog/images/data-mapping-4-1.png)](data-mapping-4-1.png)

JSON数组中的单个元素不能同时是数字和空值。过滤器和相关组件规定，"圆柱体"列中的空数据将被映射到第4项中的空值类型。如果该值不是空值，则将被映射到数字类型。我们可以使用相同的过滤器结构来处理所有其他可能包含空值的列。

MapForce 包含一个创建用户自定义函数的功能，这允许我们保存过滤器结构，并在当前映射以及其他包含空值的 JSON 数据映射中重复使用。我们只需选择所需的过滤器和相关组件，然后在“函数”主菜单中选择“创建用户自定义函数”：

[![创建一个用户函数来处理空值](/blog/images/data-mapping-user-funct-1030x381.png)](data-mapping-user-funct.png)

用户函数会将选定的组件封装起来，替换掉原始映射中的相应部分，并将该函数添加到函数库中

[![用于检测源数据库中空值数据的用户函数](/blog/images/user-function-def-1.png)](user-function-def-1.png)

我们可以直接从库中拖动用户函数，并将其连接到其他允许为空的数据库列。

有时，在将 JSON 数据映射时，将空文本值映射为空字符串可能更合适。MapForce 可以通过使用“替代缺失值”功能来满足这一需求。在下面的图片中，数据库最后一列中的空文本值被映射为空字符串：

[![将空值映射为空字符串](/blog/images/data-mapping-5a.png)](https://www.altova.com/blog/?attachment_id=4698)

以下是完成的数据映射图，其中包含了用于检测空值的用户函数：

![JSON Lines 格式数据映射完成后的效果图](/blog/images/data-mapping-complete-1030x870.png)

请注意，在左侧的“库”窗口中，有一个名为“空值检测器”的用户函数，它已被高亮显示。

现在，既然我们已经考虑了所有可能的空值情况，我们可以点击“输出”按钮来生成 .jsonl 格式的输出文件

[![.jsonl 输出文件的部分内容](/blog/images/output-view.png)](output-view.png)

请注意，第1675行以及其他一些行既包含空值，也包含空字符串，但第1690行到1691行则完全填充了数据。

对于一次性的转换，该输出文件可以立即保存。如果数据库需要持续更新，并且需要稍后再次进行转换，我们可以将映射关系保存为 MapForce Server 的执行文件，以便使用 MapForce Server 进行自动化处理；或者，我们也可以直接将映射关系部署到 FlowForce Server。

### 将数据映射关系以 JSON 格式存储在文件中

以下的数据映射示例展示了如何将来自 .jsonl 格式源文件的类似数据集映射到数据库表中。

[![将 JSON 格式的数据作为源，用于创建新的数据库表](/blog/images/data-mapping-reversed.png)](data-mapping-reversed.png)

为了使这个版本更清晰，我们使用 XMLSpy 编辑了 JSON 模式，为数组中的每个单元格添加了描述，并删除了无效的数据类型。点击此映射的“输出”按钮，将生成一个 SQL 脚本，用于将数据加载到数据库表中。

请注意，所有空值项都不需要从源端到目标端的连接。 任何必要的空值都会自动插入到数据库表中，就像第18行所示的那样：

[![生成用于将数据映射 JSON 格式的数据导入数据库表的 SQL 脚本](/blog/images/SQL-script-ouput.png)](SQL-script-ouput.png)

[下载免费试用版](https://www.altova.com/zh/mapforce/download)，其中包含教程、帮助文档以及大量示例，帮助您快速上手，用于您的数据映射、JSON Lines或其他数据映射、转换和处理项目！
