如何避免Logic Apps通过Data Factory传递JSON时出现多余反斜杠?
解决ADF传递Graph API JSON到存储过程的转义问题
问题根源
你当前用concat手动拼接JSON字符串时,直接将Graph返回的数组(body('Get_User_Email')?['value'])插入字符串中,ADF会自动将数组转为带转义符的字符串形式,导致最终传递的JSON出现大量\和\\\,存储过程无法识别合法的JSON结构。
最佳解决方法
方法1:用Compose活动构造原生JSON(推荐)
直接通过ADF的Compose活动生成无转义的JSON对象,避免手动拼接的错误:
- 在Pipeline中添加一个Compose活动
- 在Compose的「内容」中输入以下表达式(直接构造JSON结构):
{ "Function": "WriteEmail", "JSON": @body('Get_User_Email')?['value'] }
- 将存储过程活动的参数值设置为
@outputs('Compose')(如果存储过程接受JSON对象),或者@string(outputs('Compose'))(如果存储过程接受字符串类型的JSON)
方法2:用表达式正确构造JSON字符串
如果不想新增Compose活动,可直接用表达式完成合法JSON字符串的构造:
- 若存储过程参数为字符串类型(NVARCHAR),使用以下表达式作为参数值:
concat('{"Function":"WriteEmail","JSON":', string(body('Get_User_Email')?['value']), '}')
- 若存储过程参数为JSON类型,再套一层
json()函数转为JSON对象:
json(concat('{"Function":"WriteEmail","JSON":', string(body('Get_User_Email')?['value']), '}'))
关键说明
string()函数会将数组转为标准无转义的JSON数组字符串,替代了手动拼接时的隐式转义- 避免用
"代替双引号,直接在单引号包裹的表达式中使用双引号即可,更易读且不会引入额外转义
内容的提问来源于stack exchange,提问作者JohnD
相关产品推荐
相关产品推荐

