使用最大行长度简洁地序列化 JSON

gtd*_*gtd 5 ruby json smtp email-headers sendgrid

所以我生成了一个可能很长的 JSON 字符串,用于 Sendgrid 的 SMTP API。因为它是一个 SMTP 标头,所以它应该有一个最大行长度(推荐 72,但绝对不超过 1000)。末尾的文档中描述了一种简单的解决方案:

http://docs.sendgrid.com/documentation/api/smtp-api/developers-guide/

他们建议这样做:

$js =~ s/(.{1,72})(\s)/$1\n   /g;
Run Code Online (Sandbox Code Playgroud)

但我不喜欢那样,因为它可能会在空格有意义的字符串中拆分。此外,当空间很少且距离很远时,性能似乎非常糟糕。

现在我正在使用 Ruby,我可以执行以下操作:

JSON.generate(@hash, options)
Run Code Online (Sandbox Code Playgroud)

http://flori.github.com/json/doc/classes/JSON.html#method-i-generate 中记录的选项提供了不同的格式选项。但是这些都没有给我我想要的,这是每隔一段时间带有换行符的简洁 JSON。

有任何想法吗?

Chr*_*cca 1

options = {
  indent:'',
  space:"\n",
  space_before:"\n",
  object_nl:"\n",
  array_nl:"\n",
}
Run Code Online (Sandbox Code Playgroud)

这会在每个位置放置一个换行符,这样做不会影响 JSON 的语义,并禁用任何缩进。

它并不简洁,也不人性化,但换行符只是 1 个额外的字符,因此拥有大量换行符不会以任何实际方式影响性能。它还为您提供尽可能短的行,而不影响字符串的内容。您可能应该检查这些以确保它们都在长度限制之内。