折叠 JSON 字符串的正确语法是什么?



我正在使用Delphi 2009构建一个字符串变量,其中包含从数据库中获得的值中的简单JON字符串。这会产生以下形式的字符串(尽管实际字符串可能更长)

{"alice@example.com": {"first":"Alice", "id": 2},"bob@example.com": {"first":"Bob", "id":1},"cath@example.com": {"first":"Cath", "id":3},"derek@example.com": {"first":"Derek", "id": 4}}

此字符串在电子邮件中作为名为收件人变量的标头发送给公司。

我向公司发送电子邮件的说明说

注意 "收件人变量"标头的值应为 有效的 JSON 字符串,否则我们将无法解析它。如果 您的"收件人变量"标头超过 998 个字符, 您应该使用折叠将变量分布在多行上。

我查看了这些SO帖子,试图理解折叠的含义,但无法真正理解回复,因为它们似乎经常引用特定的编辑器。

记事本++用户定义的折叠区域

在特定点折叠 JSON

您可以自定义代码折叠吗?

请有人使用我的示例向我展示我应该使用什么语法或我需要在我的字符串中插入哪些字符以符合指令并折叠我的 JSON 字符串,比如在 bob 和 cath 的记录之间?

(顺便说一句,我理解在编辑器中查看JSON 或其他代码时折叠的含义,但我不明白需要如何格式化简单的 JSON 字符串才能在特定位置进行折叠)

我终于自己找到了答案,所以在这里发帖来帮助别人,以防万一。 答案在网络工作组于2001年发布的关于rfc2822标准的文档中给出(P. Resnick,编辑)

https://www.rfc-editor.org/rfc/rfc2822#page-11

文件...

指定在计算机之间发送的文本消息的语法 用户,在"电子邮件"消息的框架内。

。特别是描述了电子邮件是如何构建的,特别是如何处理长标题。

第 2.2.3 节讨论了长标头字段,> 998 个字符,并说需要通过插入 CRLF 字符后跟一些空格(例如空格字符)来折叠此类标头。

如果接收服务器遵循相同的标准,它将在解析标头之前去除 CRLF 字符,标头本身将包括剥离空格字符。

尽管结构化字段主体的定义方式是
fold 可以在许多词法标记之间(甚至
在某些词法标记内)之间进行,但折叠应限制为
将 CRLF 置于更高级别的语法中断处。 例如,如果
字段正文定义为逗号分隔值,则建议
在逗号分隔结构化项目之后进行折叠 优先选择可以折叠字段的其他地方,即使
在其他地方允许。

稍后,在第 3.2.3 节中,它解释了如何将注释与折叠空格相结合。

因此,如果通过代码生成字符串,则需要通过检测距标头开头(或最后一个折叠点)少于 988 个字符的更高级别的语法边界(例如逗号)来折叠长标题行并插入三个十六进制字符 x0D0A20。这可以在构建标头后完成,也可以在生成标头时动态完成。

作为后续行动,我现在注意到我正在使用的Overbytes ICS组件(TSslSmtpCli)具有布尔属性FoldHeaders因此这可能为我完成所有工作。

最新更新