如何在Azure Data Factory(ADF)中合并JSON文件并移除回车换行与嵌套数组
处理ADF合并JSON时的换行符问题及嵌套数组扁平化方案
方案1:使用ADF数据流(Data Flow)完成合并+扁平化+去换行
这是最直接的ADF原生解决方案,无需额外服务:
- 数据源配置:选择JSON格式,指定多个源文件路径或开启递归浏览,读取所有待合并的JSON文件。
- 扁平化嵌套数组:添加「扁平化(Flatten)」转换,选中多层嵌套的数组字段,设置展开规则将嵌套层级拉平为单一层级的数据行。
- 聚合为单一数组:添加「聚合(Aggregate)」转换,将所有平展后的行聚合为一个数组字段(如需输出数组格式)。
- 接收器配置:选择JSON格式,设置「文件行为」为「合并文件」,同时在接收器的「设置」面板中:
- 关闭「每行一个文档」选项,确保输出为单个JSON对象/数组;
- 开启「紧凑输出」模式(或直接设置JSON序列化的分隔符为
(',', ':')),自动移除多余换行符。
方案2:复制活动+Azure Function后置处理
适合需要保留复制活动逻辑,仅做后续清洗的场景:
- 先用ADF复制活动完成多文件合并,输出到Azure Blob存储(即使存在换行符也没关系)。
- 创建Blob触发的Azure Function,当合并后的文件生成时自动执行:
- 读取目标Blob的内容,直接用字符串替换移除
\r和\n; - 解析JSON结构,遍历并扁平化嵌套数组(根据实际字段调整逻辑);
- 将处理后的内容以紧凑JSON格式重新写入目标Blob。
- 读取目标Blob的内容,直接用字符串替换移除
- 示例Python核心代码:
import json import azure.functions as func def main(myblob: func.InputStream, outputblob: func.Out[bytes]): # 读取并清洗换行符 raw_content = myblob.read().decode('utf-8').replace('\r', '').replace('\n', '') # 解析并扁平化嵌套数组(示例:假设嵌套字段为nested_items) source_data = json.loads(raw_content) flattened_data = [] for entry in source_data: if "nested_items" in entry: flattened_data.extend(entry["nested_items"]) else: flattened_data.append(entry) # 生成紧凑JSON output_content = json.dumps(flattened_data, separators=(',', ':')) outputblob.set(output_content.encode('utf-8'))
方案3:ADF Lookup+Azure SQL存储过程中转
适合需要复杂数据处理逻辑的场景:
- 用ADF Lookup活动读取所有源JSON文件,将数据加载到Azure SQL DB的临时表中。
- 编写存储过程,使用
OPENJSON解析嵌套数组并扁平化,然后将所有数据拼接为单个紧凑JSON字符串。 - 用ADF Copy活动将存储过程输出的JSON字符串写入目标文件,确保输出无多余换行。
内容的提问来源于stack exchange,提问作者RAMA RAJU
相关产品推荐
相关产品推荐

