如何在Azure Data Factory中提取API返回JSON指定字段值至Azure SQL DB
解决方法:从JSON数组提取value字段存入Azure SQL DB(无需修改目标端)
我刚好处理过类似的场景,给你几个可行的方案,都不需要修改目标Azure SQL DB的结构:
方法1:复制活动列映射用动态表达式直接解析
这是最简便的方式,在复制过程中直接处理字段:
- 打开你的复制活动,切换到映射标签页
- 找到返回JSON数组的源列,点击目标列对应的表达式编辑器(那个小铅笔图标)
- 输入对应的表达式,比如你的源列名叫
customField,就写:
原理很简单:@json(item().customField)[0].valuejson()把字符串格式的JSON转成可操作的对象[0]因为你的JSON是数组结构,取第一个元素.value直接提取目标字段的值
- 如果担心JSON格式无效导致报错,可以加个容错:
@try(json(item().customField)[0].value, '')
方法2:用Azure SQL的JSON函数做转换(适合有中间暂存的场景)
如果你的API数据可以先暂存到Azure SQL的临时表,或者能通过查询方式获取源数据,可以用SQL自带的JSON函数提取:
比如临时表staging_table里的json_column存着目标JSON数组,你可以写查询语句:
SELECT -- 其他字段照常保留 col1, col2, -- 提取value字段 JSON_VALUE(json_column, '$[0].value') AS target_column FROM staging_table
把这个查询作为复制活动的源,直接映射到目标列就行。
方法3:用数据流(Data Flow)做复杂转换
如果你的数据链路有更多复杂逻辑,用ADF/Synapse的数据流更灵活:
- 添加源数据集连接你的API
- 加一个派生列转换,要么替换原列,要么新建列,表达式写:
json(源列名)[0].value - 把处理后的列映射到Azure SQL的目标列,运行数据流完成复制
如果你的JSON数组可能有多个元素,记得根据业务逻辑调整(比如遍历数组取所有value,或者取特定位置的元素)。
内容的提问来源于stack exchange,提问作者Gagan
相关产品推荐
相关产品推荐

