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

Azure Data Factory中如何将JSON列追加到另一个JSON对象?

解决方案

核心思路

别用@concat()做字符串拼接,改用ADF的union()函数合并对象属性,结合ForEach活动和变量构建合并后的JSON数组,最后保存到存储。

具体步骤

1. 初始化数组变量

在Pipeline里创建一个数组类型的变量,比如命名为mergedResult,用来存合并后的对象数组。

2. 添加ForEach活动遍历Lookup结果

把ForEach活动的Items属性设为Lookup活动的输出数组:

@activity('LookupDataModel').output.value

3. 在ForEach内部处理对象合并

在ForEach里加两个子活动:

  • DownloadTextract活动:根据当前迭代项的ID(@item().ID)执行文本提取,输出要包含Response字段。
  • Append to Variable活动:把当前迭代项和DownloadTextract的Response合并后追加到mergedResult变量,表达式写:
    @union(item(), activity('DownloadTextract').output.Response)
    

    注意:如果Response和Lookup项有重复字段,union()会用Response里的值覆盖Lookup项的对应值。

4. 保存合并结果到存储

在ForEach之后加Copy Activity:

  • 源选Azure Data Factory的变量类型,选中mergedResult。
  • 目标选你的存储服务(比如Blob Storage),设置好文件路径,格式选JSON并设为数组模式。

替代方案(单批小量数据)

如果DownloadTextract输出的是和Lookup数组一一对应的Response数组(比如activity('DownloadTextract').output.ResponseArray),可以直接用表达式构建合并数组,不用ForEach:

@createArray(
  union(activity('LookupDataModel').output.value[0], activity('DownloadTextract').output.ResponseArray[0]),
  union(activity('LookupDataModel').output.value[1], activity('DownloadTextract').output.ResponseArray[1]),
  ...
)

这种方式只适合固定长度的小批量数据,大批量数据还是用ForEach更稳妥。

关键注意事项

  • 确保DownloadTextract的Response是JSON对象,不是字符串;如果是字符串,先用@json()转换:@union(item(), json(activity('DownloadTextract').output.Response))。
  • ForEach的Sequential属性设为true会逐个处理项,适合依赖前项结果的场景;设为false并行处理,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:50:13