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

Azure Data Factory Data Flow生成JSON时去除列名与转义符方法

解决Azure Data Factory Data Flow输出JSON时自动添加列名和转义符的问题

问题分析

你通过派生列生成了目标JSON字符串jsondata,但默认JSON Sink会将每行数据封装为一个JSON对象(列名作为键,列值作为字符串值),导致输出变成类似{"jsondata":"{\"key\":\"value\"}"}的格式,而非期望的原生JSON内容。直接用replace函数无效的原因是,ADF在Sink输出阶段会自动对字符串值做转义处理,提前替换的转义符会被再次添加。

可行解决方案

方案1:用分隔符文本Sink直接输出原始字符串

这是最直接的方法,因为我们已经生成了完整的JSON内容,不需要ADF再做JSON序列化:

  • 保持现有派生列jsondata的逻辑(确保内容是合法的JSON字符串,无多余转义)
  • 将Sink类型改为Delimited Text:
    1. 在Sink设置中,选择存储账户、容器和目标文件名
    2. 进入Format settings:
      • 设置Column delimiter为None(无需列分隔符)
      • 设置Row delimiter为\n(如果每行对应一个独立JSON对象),若要输出单个JSON数组则留空
      • 取消勾选First row as header
      • 把Quote character设为No quote,Escape character设为None
  • 运行数据流后,输出文件会直接写入jsondata列的原始内容,无额外封装和转义。

方案2:聚合后用单文档JSON Sink输出

如果需要输出单个JSON数组文件,可以先聚合所有行的JSON内容:

  1. 添加Aggregate转换,选择不分组(Group by无字段),用表达式collect(jsondata)生成包含所有JSON字符串的数组,命名为jsonArray
  2. 添加派生列,用表达式concat('[', replace(string(jsonArray), '\"', ''), ']')将数组转换为合法的JSON数组字符串(replace用来去掉数组序列化时自动添加的引号),命名为finalJson
  3. 配置JSON Sink:
    • 勾选Single document(输出单个文件)
    • 在Format settings中,设置File pattern为None,Quote character为No quote
    • 确保Sink只包含finalJson列,输出后文件内容就是完整的JSON数组,无额外封装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:23:10