如何将Set Variable活动输出写入JSON文件?遇类型转换错误
问题解决:Copy Data活动无法写入Array变量到JSON文件
错误原因
你遇到的Failed to convert the value in 'value' property to 'System.String' type错误,核心原因是直接将Array类型变量绑定到Copy Data源的额外列时,Copy Data默认会尝试把数组转换为字符串,但变量里的嵌套对象结构无法被直接序列化;再加上空JSON源没有数据行来承载数组展开后的内容,最终触发类型转换失败。
正确操作步骤
1. 替换Copy Data的数据源
放弃空JSON数据集,改用Lookup活动或Script活动生成可被Copy Data处理的行集:
- Lookup活动方案:
- 创建一个返回单一行的数据集(比如仅含1列1行的空CSV,或结构为
{"dummy":""}的JSON文件) - 在Lookup活动的附加列中添加列
OrderList,值绑定为@variables('OrderList') - 将Copy Data的源设置为该Lookup活动的输出
- 创建一个返回单一行的数据集(比如仅含1列1行的空CSV,或结构为
- Script活动方案(适用于Azure Data Factory):
- 添加Script活动,在脚本中输入
@activity('Set Variable').output.value - 该活动会直接将数组拆分为多行数据,Copy Data的源设置为Script活动的输出
- 添加Script活动,在脚本中输入
2. 调整JSON接收器配置
- 在JSON数据集的设置中,将文件模式改为
Array of objects,确保输出为标准的JSON数组格式 - 无需预先创建带空
OrderList的虚拟文件,Copy Data会自动生成正确结构的JSON文件
3. 修正映射逻辑
如果用Lookup活动方案,需要在Copy Data的源中使用@explode()函数展开数组:
- 在Copy Data源的查询框中输入:
@explode(activity('Lookup').output.firstRow.OrderList)
- 此时Copy Data会将数组中的每个对象作为单独一行进行映射,直接将字段对应到接收器即可;如果需要输出包含
OrderList键的嵌套结构,可以在映射前添加派生列活动,构造{"OrderList": <数组内容>}的结构
内容的提问来源于stack exchange,提问作者Ruhul Amin
相关产品推荐
相关产品推荐

