添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1. 概述

1.1 应用场景

用户的 JSON 数据中包含多个数组字段,如下图所示:

1695111552508285.png

希望解析数组字段,且解析后的字段一一对应。如下图所示:

1695111694348066.png

1.2 实现思路

「JSON 解析」算子中,选择要解析的 JSON 字段后,修改 JSON 路径。

1.3 任务展示

FineDataLink 中的数据处理过程,详情参见: https://demo.finedatalink.com/ 「解析并关联多个JSON数组字段 」。

2. 示例

2.1 4.16版本及之后示例

2.1.1 获取 JSON 数据

用户实际环境中 JSON 数据的来源多样,本示例直接创建一个包含数组的 JSON 数据。

1)新建定时任务,拖入「数据转换」节点,进入「数据转换」节点。

2)拖入 「Spark SQL」算子,模拟用户场景,创建包含数组的 JSON 数据。如下图所示:

SQL 语句如下所示:

点击展开更多
select '{
"header": {
"desc": "success",
"failures": [],
"oprs": 1,
"succ": 1,
"oprtime": 0,
"quota": 1,
"rquota": 200000000,
"status": 0,
"traceid": "a9874ba8-b3a0-11ed-8323-97b36044f232"
},
"body": {
"data": [
{
"result": {
"total": 20,
"pageSum": [
[
386,
130,
279,
212,
189,
41.98,
263,
71.06,
230,
8.61,
"--",
"--"
],
[],
[]
],
"timeSpan": [
"2023/03/01 - 2023/03/02"
],
"sum": [
[
364,
200,
249,
212,
82,
41.98,
253,
71.06,
220,
1.61,
"--",
"--"
],
[]
],
"fields": [
"aa",
"bb",
"cc",
"dd",
"ee",
"ff",
"hh",
"ii",
"er",
"ef",
"qw",
"dg"
]
}
}
],
"expand": {}
}
}' as json

2.1.2 解析数据

拖入 「JSON 解析」算子,解析 JSON 数据。

1)选择源字段为 json,JSON 节点选择 sum、fields。

此时点击 数据预览 效果如下图所示:

1695112840997492.png

解析后的数据为数组格式。我们需要修改 JSON 路径,解析数组字段,使得解析后的字段一一对应。

2)JSON 路径修改如下图所示:

1695112999714386.png

JSON 表达式
说明
[0][*] [0]:表示访问数组中的第一个元素。在 JSON 数组中,索引通常从 0 开始,所以 [0] 表示访问数组中的第一个元素

[*]:表示通配符,用于表示匹配数组中的所有元素,即匹配当前位置处的数组的所有元素

[0][*] 表达式的含义是:访问 JSON 数组中的第一个元素,并获取该元素的所有子元素。这通常在嵌套的 JSON 结构中使用,以获取特定元素的子元素集合

JSON 路径更多介绍请参见: https://github.com/json-path/JsonPath

点击 数据预览 ,效果如下图所示:

1695174841805164.png

3)用户根据实际情况,继续数据进行处理或输出。

2.2 4.1.8及之后版本

2.2.1 获取JSON数据

1)新建定时任务,拖入「数据转换」节点,进入「数据转换」节点。

2)拖入 「Spark SQL」算子,模拟用户场景,创建包含数组的 JSON 数据。如下图所示:

2.2.2 解析数据

注:最新版本仅支持同一条路径下的数组解析,对多字段进行数组解析时,需分别解析

1)拖入一个 「JSON 解析」算子,对 sum 进行解析 。

选择源字段为 json,JSON 节点选择 sum,result ,如下图:

注:result 为下一字段解析提供前提

解析后的数据为数组格式。我们需要修改 JSON 路径,解析数组字段,如下图所示:

2)再拖入一个「JSON 解析」算子,与上一个连接,对 fields 进行解析 。

选择源字段为 result 并勾选保留上有输出字段,JSON 节点选择 fields,点击确定后,修改解析路径。如下图:

数据预览结果如下:

2.2.3 输出数据

使用 DB表输出 算子,将解析后的数据输出,设置取消 result 字段映射。 如下图所示:

点击运行成功后,结果如下: