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

时间:2019-04-24 08:52:07

标签: json folding

我正在使用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}}

此字符串将作为标题为“收件人变量”的标头通过电子邮件发送给公司。

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

  

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

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

notepad++ user defined regions with folding

Folding JSON at specific points

Can you customize code folding?

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

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

1 个答案:

答案 0 :(得分:0)

我终于找到了答案,以防万一。 答案是在网络工作组(P. Resnick,编辑)于2001年发布的有关rfc2822标准的文档中给出的。

https://tools.ietf.org/html/rfc2822#page-11

文档...

  

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

...尤其是描述电子邮件的构造方式,尤其是如何处理长标题。

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

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

  

尽管结构化现场主体的定义方式
  折叠可以发生在许多词法标记之间(甚至
  在某些词法标记中),应将折叠限制为
  将CRLF置于较高级别的语法中断处。例如,如果
  字段主体定义为逗号分隔的值,建议
  折叠发生在逗号分隔结构项之后   优先考虑可以折叠字段的其他地方,即使
  可以在其他地方使用。

稍后,在3.2.3节中,它将说明如何将注释与折叠的空白区域结合起来。

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

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