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

问题描述 投票:0回答:1

我正在使用Delphi 2009来构建一个字符串变量,该变量包含来自数据库的值的简单JON字符串。这导致下面的表格字符串(虽然真正的字符串可能会更长)

{"[email protected]": {"first":"Alice", "id": 2},"[email protected]": {"first":"Bob", "id":1},"[email protected]": {"first":"Cath", "id":3},"[email protected]": {"first":"Derek", "id": 4}}

该字符串将作为名为Recipient-Variables的标题发送到公司的电子邮件中。

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

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

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

notepad++ user defined regions with folding

Folding JSON at specific points

Can you customize code folding?

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

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

json folding
1个回答
0
投票

我终于找到了答案,所以在这里张贴以帮助别人,以防万一。本文件中的答案在rfc2822标准中给出,该标准由网络工作组于2001年出版(P. Resnick,编辑)

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

文件......

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

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

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

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

虽然结构化的场体是以这样的方式定义的 折叠可以发生在许多词汇标记之间(甚至是 在一些词法标记中),折叠应该限制为 将CRLF置于更高级别的句法中断。例如,如果 字段主体定义为逗号分隔值,建议使用 折叠发生在逗号分隔结构化项目之后,优先于其他可折叠字段的地方,即使 在其他地方允许。

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

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

作为后续,我现在注意到我正在使用的Overbytes ICS组件(TSslSmtpCli)有一个布尔属性FoldHeaders,所以这可能会为我做所有的工作。

© www.soinside.com 2019 - 2024. All rights reserved.