VBA中如何将邮件对象内容用双引号包裹生成合法JSON
解决VBA生成合法双引号JSON的问题
嘿,这个坑我之前也踩过!VBA里处理字符串的双引号转义确实容易搞混,你之前的写法问题出在转义方式不对——在VBA的字符串里,要输出一个真正的双引号,得用两个双引号来转义,而不是你之前的"""拼接方式。
方法一:手动拼接(适合简单场景)
先给你修正手动拼接的代码,用正确的转义方式:
Dim smry As String, descrp As String, jsTest As String smry = """summary""" ' 这里会生成带双引号的键:"summary" descrp = """description""" ' 生成键:"description" ' 核心:用两个双引号转义出一个双引号,把内容包裹起来 jsTest = "{" & smry & ":" & """" & CStr(Msg.Subject) & """" & "," & descrp & ":" & """" & CStr(Msg.Body) & """" & "}"
解释下关键部分:"""" & CStr(Msg.Subject) & """" 其实是拆成了三个部分:
- 前两个双引号 → 转义成一个
" - 中间是邮件主题的内容
- 后两个双引号 → 再转义成一个
"
这样拼出来就是"Release 18.20 Produktion"这种符合规范的格式。
不过手动拼接有个隐患:如果邮件主题或正文里本身包含双引号、换行符这类特殊字符,直接拼接会破坏JSON结构,导致JSON无效。所以更推荐下面的专业方法。
方法二:用JSON库生成(更稳妥,支持特殊字符)
用专门的VBA JSON库(比如VBA-JSON)来生成JSON,它会自动处理所有转义和格式问题,比手动拼接靠谱太多。
步骤很简单:
- 先把VBA-JSON模块导入到你的VBA工程里(直接复制模块代码到工程中即可)
- 引用
Microsoft Scripting Runtime(VBA编辑器→工具→引用,找到它勾选)
然后用下面的代码:
' 创建字典对象来存储键值对 Dim jsonDict As Object Set jsonDict = CreateObject("Scripting.Dictionary") ' 添加需要的字段,不用管双引号,库会自动处理 jsonDict("summary") = CStr(Msg.Subject) jsonDict("description") = CStr(Msg.Body) ' 转换为标准JSON字符串 Dim jsTest As String jsTest = JsonConverter.ConvertToJson(jsonDict)
这样生成的JSON不仅是双引号包裹的合法格式,就算内容里有特殊字符(比如用户输入的双引号),库也会自动转义成\",完全符合JSON规范。
内容的提问来源于stack exchange,提问作者khashashin
相关产品推荐
相关产品推荐

