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

如何用ADF合并JSON文件并添加原文件名作为数据键?

解决方案:ADF实现带文件名键的JSON合并(替代Lookup)

ADF原生复制活动无法直接实现

ADF复制活动的合并功能仅支持将多个JSON对象/数组直接拼接,无法自动保留原文件名作为键,也无法按文件名分组聚合数据到数组,所以单纯用复制活动达不到需求。

推荐方案1:使用ADF数据流(无大小限制)

数据流适合处理大规模数据,没有Lookup活动的大小限制,步骤如下:

  1. 配置源数据集

    • 源类型选Blob存储,路径使用通配符(如container/folder/*.json)
    • 在源转换的选项中,勾选「保留文件名」,添加自定义列(比如命名为SourceFileName),值选择FileName变量,让每个数据行带上原文件名称
  2. 解析JSON内容

    • 添加「解析」转换,将源文件的JSON内容列(默认是$Content)解析为结构化数据:
      • 若原文件是单个JSON对象,用「派生列」转为数组,表达式:array($ParsedContent)
      • 若原文件本身是JSON数组,直接解析即可
  3. 按文件名分组聚合

    • 添加「聚合」转换,分组键选择SourceFileName,新增聚合列(比如DataArray),用collect()函数将分组内的数据行聚合为数组,表达式:collect($ParsedContent)
  4. 构建键值对结构

    • 添加「派生列」转换,生成文件名对应的键值对对象,表达式示例:
      @createMap(SourceFileName, DataArray)
      
  5. 合并为单个JSON对象

    • 再添加一个「聚合」转换,不设置分组键,用collect()将所有键值对聚合为数组,再转为单个JSON对象,表达式:
      replace(stringify(collect(KeyValuePair)), '[[', '{').replace(']]', '}')
      
  6. 配置接收器

    • 接收器选Blob存储,格式为JSON,设置为「单个文件」,将合并后的JSON写入目标Blob

替代方案2:使用Azure Function(灵活处理复杂场景)

如果数据流处理复杂嵌套JSON有困难,可采用Azure Function实现:

  • 触发方式:用Blob存储触发器监听源文件容器的新增文件,或定时触发遍历所有目标文件
  • 核心逻辑:
    • 遍历指定容器内的所有JSON文件(可过滤已处理文件)
    • 逐个读取文件内容,将单个JSON对象转为数组(原文件是数组则直接使用)
    • 以文件名(不含.json后缀)为键,将数组存入字典
    • 将字典序列化为JSON字符串,写入目标Blob文件
  • 优势:完全自定义逻辑,适配任何JSON结构,无数据大小限制(只要Function内存足够)

内容的提问来源于stack exchange,提问作者Sakhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:52:18