Azure Logic Apps中ParseJson组件因反斜杠解析失败的解决方法
解决Azure Logic Apps ParseJson处理单个反斜杠的问题
问题本质
你拿到的JSON本身不符合JSON语法规范——JSON中单个反斜杠必须转义为双反斜杠,否则会被判定为无效转义序列,导致ParseJson报错。要保留原始的单个反斜杠值,需要分两步处理:先修复JSON合法性,再还原原始值。
具体实现步骤
第一步:修复非法JSON为合法格式
在ParseJson组件之前,先对原始JSON字符串做替换,把单个反斜杠转成双反斜杠。- 如果原始请求体是字符串类型,直接用表达式:
replace(triggerBody(), '\', '\\') - 如果原始请求体是JSON对象(但本身格式非法),先转成字符串再替换:
replace(string(triggerBody()), '\', '\\')
这一步会把
{"user":"bbbbbb\aaaaaa"}转换成合法的{"user":"bbbbbb\\aaaaaa"}。- 如果原始请求体是字符串类型,直接用表达式:
第二步:用修复后的JSON解析
将第一步输出的结果作为ParseJson组件的Content输入,此时组件能正常解析,解析后的user字段值为bbbbbb\\aaaaaa。第三步:还原单个反斜杠
对解析后的字段值做反向替换,把双反斜杠转回单个反斜杠。使用表达式:replace(body('ParseJson')?['user'], '\\', '\')最终得到的结果就是你需要的
bbbbbb\aaaaaa。
特殊场景补充
如果原始数据中存在其他合法的JSON转义序列(比如\n、\t),直接替换所有反斜杠会破坏这些合法转义。这种情况下需要精准替换,只处理不属于合法JSON转义的单个反斜杠,用正则表达式替换的表达式示例:
replace(string(triggerBody()), '(?<!\\)(\\[^btnfr"\\/u])', '\\$1')
这个正则会匹配未被转义、且后面不是合法JSON转义字符的反斜杠,仅对这类反斜杠做转义处理,避免破坏原有合法转义。
内容的提问来源于stack exchange,提问作者Gosfly
相关产品推荐
相关产品推荐

