在本关联学习路径中,我们将创建一个链,演示如何将包含嵌套对象的 JSON 数据集转换为 CSV。此外,我们还将探讨如何使用笛卡尔连接来展平这种嵌套结构。
| 主要学习目标 | 嵌套 JSON 对象的 JSON 连接器功能 |
| 次要学习目标 | 表格转换高级查询命令 |
| 先决条件 | 配置 JSON 连接器连接 配置 HTTP 连接器连接 |
| 支持模板 | CLP | 访问 JSON 嵌套对象 |
步骤 1:创建链
- 添加一条新链。
- 命名链: CLP | 访问 JSON 嵌套对象。
- 创建一个链式变量,并使用以下值填充它:
- 名称: cv-JSON-甜甜圈
- 值: https://cs-sftp-training-bucket.s3.amazonaws.com/cs-training/transformation-qs/donut.json
- 拯救链条。
步骤 2:检索 JSON 数据
使用 HTTP 连接器从 Web 位置以 JSON 格式检索与人员统计相关的数据。
- 从 HTTP 连接器 向启动节点添加 GET 命令。
- 请使用以下值配置命令:
姓名 GET - JSON 数据 用户名 <leave blank> 密码 <leave blank> CA证书 <leave blank> 证书 <leave blank> 证书私钥 <leave blank> 显示回复 已核取 网址 cv-JSON-Donut 链式变量 查询字符串 <leave blank> 内容类型 application/json 回复
<leave blank> - 保存命令。
步骤 3:获取未嵌套的 JSON 数据
此链使用 JSON 连接器中的 Object to CSV 命令从 JSON 对象中提取名称和类型键(非嵌套键)。
注: 理解 JSON 数据集的模式非常重要。可以使用 文件实用程序] 连接器中的 列出文件内容 命令来可视化架构。作为参考,以下是“甜甜圈”JSON的结构:
模式:
{"id":"0001","type":"甜甜圈","name":"蛋糕","ppu":0.55,"batters": {"batter":[{"id":"1001","type":"常规"},{"id":"1002","type":"巧克力"}, {"id":"1003","type":"蓝莓"},{"id":"1004","type":"魔鬼蛋糕"}]}, "topping":[{"id":"5001","type":"无"},{"id":"5002","type":"糖霜"}, {"id":"5005","type":"糖"},{"id":"5007","type":"糖粉"}, {"id":"5006","type":"巧克力糖屑”},{"id":"5003","type":"巧克力"}, {"id":"5004","type":"枫糖"}] } - 将 对象添加到 CSV 命令,从 JSON 连接器添加到链中。
- 将起始节点(GET - JSON 数据)连接到 对象到 CSV命令。
- 打开命令提示符,并使用以下值进行配置。
- 命令名称: 对象到 CSV - 名称和类型。
- 对于 JSON 数据 参数,选择 GET - JSON 数据 命令的 响应 输出。
- 将 输入文本 和 根路径 参数留空。
- 将 多值分隔符 参数保留为逗号 (,)。
- 勾选 “预览结果 ”复选框。
- 选择 管道 作为 分隔符 参数。
列 部分用于指定要从 JSON 对象中提取哪些元素到列式 (CSV) 数据集。 - 单击 添加 按钮一次,即可添加两列。
- 对于第一列,输入 name 作为 列名称 ,输入 .name 作为 JSONPath 参数。
- 对于第二列,输入 type 作为 列类型 ,并输入 .type 作为 JSONPath 参数。
- 保存命令。
第四步:获取配料清单
使用 JSON 连接器的数组到 CSV 命令获取嵌套 JSON 数组中的配料列表。
- 将 数组添加到 CSV 命令,从 JSON 连接器添加到链中。
- 将 GET - JSON 数据 命令连接到 数组到 CSV命令。
- 请使用以下值配置命令:
- 命令名称: 数组到 CSV - 配料。
- 对于 JSON 数据 参数,选择 GET - JSON 数据 命令的 响应 输出。
- 将 输入文本 参数留空。
- 对于 根路径 参数,输入 顶部 (小写)并按 Enter 键。配料 应以灰色气泡显示,前面带有等号。
- 将筛选 参数留空。
- 对于 “多值分隔符”参数,保留默认值 “逗号 (,) ” 。
- 勾选 “预览结果 ”复选框。
- 在 列 部分,我们指定 JSON 数组中的键,要将值提取到生成的 CSV 文件中的列中。
- 对于第一个 列名 参数,输入 ToppingID,在 JSONPath 参数中,输入.id。
- 对于第二个 列名 参数,输入 ToppingType,在 JSONPath 参数中,输入.type。
- 对于 分隔符 参数,选择管道。
- 保存命令。
第五步:获取击球手名单
该链使用 JSON 连接器中的 Array to CSV 命令来获取嵌套 JSON 数组中的击球手列表。我们将使用两个 数组到 CSV 命令来提取面糊和配料,因为每个数组的嵌套方式不同。使用嵌套 JSONPath 的
对象到 CSV命令(例如, .topping[*].type)会创建多部分值,这在 CSV 数据集中更难使用。
- 将 数组添加到 CSV 命令,从 JSON 连接器 添加到链中。
- 将 GET - JSON 数据 命令连接到 数组到 CSV命令。
- 请使用以下值配置命令:
- 命令名称: 数组到 CSV - 击球手。
- 对于 JSON 数据 参数,选择 GET - JSON 数据 命令的 响应 输出。
- 将 输入文本 参数留空。
- 对于 根路径 参数,输入 batters (全部小写)并按 Enter 键。然后输入 batter (全部小写)并按 Enter 键。
Batters 和 batter 应该按此顺序出现在两个灰色气泡中。 - 将筛选 参数留空。
- 对于 多值分隔符 参数,保留默认值 [] 逗号 (,),。
- 勾选 预览结果 选项。
- 在“列”部分,我们指定 JSON 数组中的键,以便将值提取到生成的 CSV 文件中的列中。
- 对于 列名 参数,输入 BatterID ,在 JSONPath 参数中,输入.id。
- 对于 列名 参数,输入 BatterType ,在 JSONPath 参数中,输入.type。
- 对于 分隔符 参数,选择管道。
- 保存命令。
步骤 6:展平数据
我们将使用表格转换连接器中的 “高级查询 ”命令中的“笛卡尔连接”来展平数据集。笛卡尔连接创建了使用 Object to CSV 和 Array to CSV命令提取的元素的所有可能组合。
- 将 高级查询 命令从 表格转换 连接器添加到链中。
- 将 Object to CSV - Name & Type、 Array to CSV - Batters、 和 Array to CSV - Toppings 命令连接到 Advanced Query命令。
- 请使用以下值配置命令:
- 命令名称: 高级查询 - 展平 JSON 对象。
- 在 表格 部分,单击 添加 按钮两次,以便显示三个可用表格。
请使用下列数值完成表格:文件 表格名称 从 对象中选择转换后的文件输出到 CSV - 名称和类型命令。 姓名 从 数组中选择转换后的文件输出到 CSV - Batters命令。 连击 从 数组中选择转换后的文件输出到 CSV - Toppings命令。 配料 - 对于 查询 参数,输入以下内容:
选择 Type as dessert_type, Name as variety, BatterType, ToppingType from Name, Batter, Topping - 对于 输入分隔符 和 输出分隔符 参数,指定 管道。
- 选中 “预览结果 ”复选框。
- 保存命令。
步骤 7:测试链条并审查结果 AAA
- 发布 链。
- 单击 执行 ,然后选择 运行链。
- 一旦链条完成,
- 单击 高级查询 - 扁平化 JSON 对象 节点,然后选择 输出 选项卡。
- 确认 记录计数 为 28。
- 选择 日志 选项卡,并确认数据预览与以下屏幕截图相符。
要了解有关使用 Chains 进行数据转换的更多信息,请查看 连接学习路径 - 转换简介。