WSO2 EI Outlook Connector JSON解析错误 如何转义字符串内JSON对象
问题根因
报错的核心是你拼接得到的emailcontent中包含JSON自带的双引号",直接填入预定义JSON结构的$3占位符时,这些内部双引号会和外层JSON的字符串边界引号冲突,破坏了整个请求的JSON结构,解析器识别到不匹配的语法标记就抛出missing } after property list错误。
解决方案
方案1:脚本内手动转义特殊字符(快速修复)
修改Script Mediator代码,拼接邮件内容后对所有JSON特殊字符做转义,再存入属性:
<script language="js"><![CDATA[ var log = mc.getServiceLog(); log.info("Logging inside Script Mediator"); var testTicketNo=mc.getProperty("DummyTicketNo"); var Incomingpayload=mc.getProperty("Incomingpayload"); // 拼接邮件内容时先处理要嵌入的JSON串 var requestJsonStr = JSON.stringify(JSON.parse(Incomingpayload)); var emailcontent="Hi Team<br/><br/> The requested Ticket Creation Done.. and the Created Ticker No is: " + testTicketNo + "<br/><br/> Below is the request Data for your reference...<br/><br/>" + requestJsonStr + "<br/> Let us know if you have any queries.. <br/><br/>Cheers<br/> WSO2 Team"; // 转义整个邮件内容的特殊字符,适配外层JSON结构 var escapedContent = emailcontent.replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r'); mc.setProperty('content',escapedContent); ]]></script>
方案2:使用PayloadFactory Mediator构造请求(更稳定,推荐)
WSO2原生的PayloadFactory Mediator会自动处理所有JSON转义逻辑,不需要手动处理特殊字符,避免人为转义遗漏:
<payloadFactory media-type="json"> <format> { "Message": { "ToRecipients": $1, "Body": { "ContentType": "$2", "Content": "$3" } } } </format> <args> <arg evaluator="xml" expression="$ctx:recipientList"/> <!-- 替换为你自己的收件人列表属性 --> <arg evaluator="xml" expression="$ctx:contentType"/> <!-- 替换为你自己的内容类型属性,通常填HTML --> <arg evaluator="xml" expression="$ctx:emailcontent"/> <!-- 直接传未转义的原始emailcontent属性即可,payloadFactory自动转义 --> </args> </payloadFactory>
使用这个方案时,你的Script Mediator不需要做任何转义逻辑,正常拼接emailcontent存入属性即可,PayloadFactory会自动处理内部双引号、特殊字符的转义,保证生成的JSON结构合法。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

