You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,当合并后的文件生成时自动执行:
    1. 读取目标Blob的内容,直接用字符串替换移除\r和\n;
    2. 解析JSON结构,遍历并扁平化嵌套数组(根据实际字段调整逻辑);
    3. 将处理后的内容以紧凑JSON格式重新写入目标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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:52:14