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

Azure Data Factory读取JSON数组并写入独立CSV文件的实现方案

实现方案(基于Azure Data Factory/Synapse 管道)

前置准备

  • 提前为管道配置目标存储账户的Storage Blob Data Contributor权限,或者提前生成存储账户的SAS令牌用于后续API鉴权。
  • 先修正JSON示例中的笔误:Timestamp: 键多了多余冒号,生产环境需保证JSON键名格式统一。

步骤1:按目标文件分组JSON对象

你已拿到所有独立JSON对象,先按AzureFilename字段做分组,相同AzureFilename的对象归为同一组,保证同组数据写入同一个CSV文件。

步骤2:构造CSV内容与目标文件名

先为每组初始化两个字符串类型变量:

  • csvContent:存储拼接完成的CSV完整内容
  • csvFileName:存储生成的目标CSV文件名

文件名生成

用内置函数转换时间戳后拼接即可匹配命名规则,表达式参考:

@concat(
  formatDateTime(unixtimeSecondsToDateTime(int(item().Timestamp)), 'ddMMyyyy'),
  '_',
  item().AzureFilename,
  '.csv'
)

CSV内容拼接

  • 如果是当前组第一个对象,先写入CSV表头:Timestamp,ItemName,Value
  • 逐行拼接每个JSON对象的对应字段,参考表达式:
@concat(
  item().Timestamp,
  ',',
  replace(item().ItemName, '"', '""'), // 转义字段内的双引号
  ',',
  string(item().Value),
  '\n'
)

如果字段值存在逗号、换行符,需额外给字段包裹双引号避免CSV格式错位。

步骤3:直接写入CSV到指定位置(无需配置Source数据源)

直接调用Azure Blob存储的Append Blob REST API实现写入,完全通过动态参数指定路径,不需要提前配置固定Source数据集:

先做文件存在性判断

调用HEAD请求访问目标路径,返回200说明文件已存在,返回404说明文件需新建:

  • 新建文件请求配置:
    • 请求方法:PUT
    • 请求URL:@concat('https://<你的存储账户名>.blob.core.windows.net/', item().AzureContainer, '/', item().AzureFolderName, '/', variables('csvFileName'))
    • 请求头:x-ms-blob-type = AppendBlob,x-ms-version = 2020-04-08
    • 请求体为空即可

追加CSV内容

  • 请求方法:PUT
  • 请求URL:@concat('https://<你的存储账户名>.blob.core.windows.net/', item().AzureContainer, '/', item().AzureFolderName, '/', variables('csvFileName'), '?action=append&position=<文件现有长度>')
    如果是新建文件后直接写入,position填0即可;如果是追加已有文件,需从HEAD请求的响应头Content-Length取现有文件长度作为position值,避免内容覆盖
  • 请求头:Content-Type = text/csv,鉴权字段用托管身份的Bearer令牌或者SAS令牌
  • 请求体直接填拼接完成的variables('csvContent')即可

可选简化方案

如果允许使用通用动态数据集,也可以配置一个参数化的分隔文本数据集,把容器、文件夹、文件名都设为动态参数,无需绑定固定Source。用Copy活动时Source直接传你构造好的JSON数组表达式,Sink选这个参数化数据集并开启追加模式,无需手动处理API调用逻辑,稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:54:03