You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:59:30