如何在Azure Data Factory中将SQL行转换为JSON对象数组?
Azure Data Factory 动态生成API请求JSON数组解决方案
针对你的需求,提供三种可行的实现方式,按需选择:
方法一:SQL层直接构造目标JSON数组
直接在SQL查询中生成符合要求的JSON数组,无需额外转换:
SELECT 'ID_ISIN' AS idType, isin AS idValue FROM your_sql_table FOR JSON PATH, ROOT('')
FOR JSON PATH会将每行转换为指定键值对的JSON对象ROOT('')会去掉默认的根节点,直接返回纯数组格式- 用ADF的Lookup活动执行该查询,获取的结果可直接作为API请求体
方法二:ADF数据流实现转换
适合数据量较大的场景,全程在数据流中完成转换:
- 数据源:连接SQL表,读取含
isin列的行数据 - 派生列活动:新增两个固定/映射列
idType:赋值为固定字符串'ID_ISIN'idValue:直接映射原表的isin列
- 聚合活动:将所有行聚合为数组
- 分组依据留空(不分组)
- 添加聚合列(如命名为
jsonArray),使用表达式:collect(@(idType=idType, idValue=idValue))
- 输出到API:
- 若用数据流的REST Sink,直接将
jsonArray作为请求体 - 也可将结果写入Blob存储,再用Lookup活动读取后传入Web活动
- 若用数据流的REST Sink,直接将
方法三:Lookup + Set Variable 拼接数组
适合数据量较小的场景,通过ADF控制流实现:
- Lookup活动:执行查询
SELECT isin FROM your_sql_table,取消勾选"第一行仅",获取所有行的数组结果 - Set Variable活动:创建一个数组类型的变量,用表达式生成目标数组:
@foreach(item in activity('LookupSQL').output.value, createObject('idType', 'ID_ISIN', 'idValue', item.isin)) - Web活动:在请求体中直接引用该变量:
@variables('yourTargetArrayVar'),并设置Content-Type为application/json
注意事项
- 若数据量超过1000行,Lookup活动会有分页限制,优先选方法一或方法二
- 测试时开启ADF Debug模式,查看每个活动的输出,验证JSON结构是否符合API要求
内容的提问来源于stack exchange,提问作者Scorpia
相关产品推荐
相关产品推荐

