ADF/Web activity变量输出异常问题求助
解决Azure Data Factory中Web Activity传递变量时的“解析值后遇到意外字符”错误
这个错误本质是Web Activity的请求体JSON格式不合法,大概率是变量嵌入时破坏了JSON结构,或者变量值本身的格式不符合JSON要求,以下是针对性的解决步骤:
1. 先确认Set Variable的赋值是否正确
Lookup活动返回的计数结果需要正确提取,确保Set Variable的表达式没有问题:
- 如果变量类型是整数,直接用:
@{activity('Lookup表A').output.firstRow['COUNT(*)']} - 如果变量类型是字符串,要转成字符串类型:
@{string(activity('Lookup表A').output.firstRow['COUNT(*)'])}
2. 保证Web Activity的请求体是合法JSON
这是最容易出错的地方,常见问题和修正方式:
错误写法示例(破坏JSON结构)
直接拼接字符串时如果变量是整数,虽然表面看没问题,但如果表达式语法错误(比如漏写@{}包裹),或者变量值包含特殊字符,就会导致JSON解析失败:
{"message": "表A行数:@{variables('CountA')},表B行数:@{variables('CountB')},两表行数相等"}
正确写法
用ADF的concat函数统一拼接字符串,确保最终生成的是合法的JSON值:
{ "message": "@{concat('表A行数:', variables('CountA'), ',表B行数:', variables('CountB'), ',两表行数相等')}" }
或者根据变量类型调整嵌入方式:
- 如果变量是整数,直接作为JSON数字嵌入:
{ "countA": @{variables('CountA')}, "countB": @{variables('CountB')}, "message": "两表行数相等" }
- 如果变量是字符串,必须用双引号包裹:
{ "countA": "@{variables('CountA')}", "countB": "@{variables('CountB')}", "message": "两表行数不相等" }
3. 调试验证技巧
- 先给Set Variable活动做Debug,查看变量的实际值和类型,确认没有空值或异常字符
- 先写静态JSON内容测试Web Activity是否能正常发送,再逐步替换成变量表达式
- 用表达式框旁边的验证按钮(闪电图标)检查表达式是否合法,避免语法错误
内容的提问来源于stack exchange,提问作者mkn
相关产品推荐
相关产品推荐

