注:本文方案适用于 4.1.6.2 之后版本。
1. 概述
1.1 应用场景
用户的 JSON 数据中包含多个数组字段,如下图所示:
希望解析数组字段,且解析后的字段一一对应。如下图所示:
1.2 实现思路
使用 Python 算子解析 JSON 数据。
1.3 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「解析并关联多个JSON数组字段」。
2. 示例
2.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.2 解析数据
使用 Python 算子解析 JSON 数据。
1)拖入 Python 算子,输入语句,如下图所示:
import pandas as pd
import json
# 假设你的 JSON 数据存储在一个 DataFrame 中
data = $[Spark SQL] # 这里是你的输入数据源
# 假设 DataFrame 中有一列包含 JSON 字符串,列名为 'json_column'
# 你需要根据实际列名进行调整
json_data = data['json'].apply(json.loads)
# 提取 sum 和 fields
sum_values = json_data.apply(lambda x: x["body"]["data"][0]["result"]["sum"][0])
fields = json_data.apply(lambda x: x["body"]["data"][0]["result"]["fields"])
# 创建 DataFrame
result_df = pd.DataFrame({
'fields': fields.iloc[0],
'sum': sum_values.iloc[0]
})
# 输出 DataFrame
print(result_df)
# ----------------------------------------
output = result_df
2)点击数据预览,即可看到解析后的表格数据,如下图所示:
3)用户根据实际情况,继续数据进行处理或输出。