如何修复JSON换行错误:未转义控制字符需用反斜杠转义
解决Outlook VBA生成JSON时换行符导致的格式错误问题
嘿,这个问题我之前踩过坑!你遇到的报错是因为JSON规范对字符串里的控制字符(比如响应里提到的CTRL-CHAR code 13,也就是回车符vbCr)有严格要求,必须转义成合法的序列才能被解析器正常识别。
问题根源
你的代码直接把Msg.Body的原始内容拼接到JSON字符串里,而邮件正文里的换行、回车这类控制字符在JSON中属于非法未转义字符,自然会触发解析错误。
解决方案1:手动转义JSON特殊字符
写一个简单的VBA函数,专门处理字符串中的JSON特殊字符,把它们转换成符合规范的转义序列:
Function EscapeJsonString(strInput As String) As String ' 按JSON规范转义特殊字符 Dim escapedStr As String escapedStr = strInput ' 先转义反斜杠(必须最先处理,避免干扰其他转义逻辑) escapedStr = Replace(escapedStr, "\", "\\") ' 转义双引号 escapedStr = Replace(escapedStr, """", "\""") ' 转义回车符(CR) escapedStr = Replace(escapedStr, vbCr, "\r") ' 转义换行符(LF) escapedStr = Replace(escapedStr, vbLf, "\n") ' 可选:转义制表符 escapedStr = Replace(escapedStr, vbTab, "\t") EscapeJsonString = escapedStr End Function
然后修改你的JSON生成代码,用这个函数处理Msg.Subject和Msg.Body:
Dim smry, descrp, jsTest As String smry = """summary""" descrp = """description""" jsTest = "{" + smry + ":" + """" + EscapeJsonString(CStr(Msg.Subject)) + """" + "," + descrp + ":" + """" + EscapeJsonString(CStr(Msg.Body)) + """" + "}"
解决方案2:使用专业JSON库(更省心)
如果以后需要生成更复杂的JSON结构,手动拼接字符串很容易出错,推荐用VBA-JSON库。它会自动处理所有转义逻辑,还能帮你构建结构化的JSON对象,代码可读性和可靠性更高:
Dim jsonObj As Object Set jsonObj = CreateObject("Scripting.Dictionary") jsonObj("summary") = Msg.Subject jsonObj("description") = Msg.Body ' 用库的方法自动生成合法JSON Dim jsTest As String jsTest = JsonConverter.ConvertToJson(jsonObj)
这样就完全不用手动处理转义问题了,后续扩展字段也更方便。
内容的提问来源于stack exchange,提问作者khashashin
相关产品推荐
相关产品推荐

