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:
- 在Sink设置中,选择存储账户、容器和目标文件名
- 进入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内容:
- 添加Aggregate转换,选择
不分组(Group by无字段),用表达式collect(jsondata)生成包含所有JSON字符串的数组,命名为jsonArray - 添加派生列,用表达式
concat('[', replace(string(jsonArray), '\"', ''), ']')将数组转换为合法的JSON数组字符串(replace用来去掉数组序列化时自动添加的引号),命名为finalJson - 配置JSON Sink:
- 勾选
Single document(输出单个文件) - 在Format settings中,设置
File pattern为None,Quote character为No quote - 确保Sink只包含
finalJson列,输出后文件内容就是完整的JSON数组,无额外封装。
- 勾选
内容的提问来源于stack exchange,提问作者Pathrudu
相关产品推荐
相关产品推荐

