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

如何解决Platform Event富文本字段存储JSON带转义反斜杠问题

Platform Event存储JSON出现多余转义反斜杠的解决方案

问题根因

你遇到的转义问题是**富文本字段(Rich Text Area)**的固有特性导致的:富文本字段为了支持HTML格式渲染,会自动对存储内容中的双引号、尖括号等特殊字符做转义处理,你直接存入原生JSON字符串时,引号前就会被自动加上反斜杠。

解决方案

方案1:替换字段类型(最优方案)

将当前使用的富文本字段替换为长文本字段(Long Text Area),长文本字段不会对存储内容做额外的格式转义:

  • 你直接把JSON.serialize()生成的JSON字符串赋值给长文本字段即可
  • 后续从Platform Event中读取该字段时,拿到的就是原生无转义的JSON,可以直接反序列化使用

注意:Platform Event的长文本字段最大支持32768字符,如果你的JSON长度超出限制,可以选择拆分多条事件发布,或者参考方案3做编码压缩。

方案2:保留富文本字段,读取时做转义还原

如果业务需求必须使用富文本字段,你可以在读取字段值后调用Salesforce的字符串方法做转义还原,示例代码:

// 从Platform Event实例中读取带转义的JSON字符串
String escapedJson = eventInstance.ContactRichTextField__c;
// 移除转义字符得到原生JSON
String rawJson = escapedJson.unescapeHtml4();
// 正常反序列化得到联系人列表
List<ContactWrapper> contactList = (List<ContactWrapper>) JSON.deserialize(rawJson, List<ContactWrapper>.class);

方案3:Base64编码后存储(适合超大JSON场景)

如果你的JSON长度超出长文本字段限制,可以在存储前做Base64编码,避免转义的同时压缩内容长度:

  • 存储时代码:
String contactJson = JSON.serialize(contactList);
String encodedContent = EncodingUtil.base64Encode(Blob.valueOf(contactJson));
eventInstance.ContactLongTextField__c = encodedContent;
  • 读取时代码:
String encodedContent = eventInstance.ContactLongTextField__c;
String rawJson = EncodingUtil.base64Decode(encodedContent).toString();
List<ContactWrapper> contactList = (List<ContactWrapper>) JSON.deserialize(rawJson, List<ContactWrapper>.class);

额外排查点

如果你已经使用长文本字段仍出现转义,需要检查代码是否存在双重序列化操作:不要把JSON.serialize()生成的JSON字符串,再次作为某个对象的属性后二次调用JSON.serialize(),这种操作也会导致JSON被额外加转义符。

内容的提问来源于stack exchange,提问作者Pinki Shaw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 21:15:00