2010-06-09 234 views
1

首先,背景:我正在编写一个使用SendGrid发送大量电子邮件的Ruby应用程序。 SendGrid使用自定义电子邮件标题(采用JSON格式)设置收件人,要替换的值等。SendGrid的文档建议分割标题,以使行少于1,000字节。将一个长的JSON字符串拆分为Ruby中的行

我的问题是这样的:给定一个很长的JSON字符串,我怎样才能将它分成几行< 1,000,以便在适当的位置(即在逗号后面)而不是在一个字的中间?

这可能是不必要的,但在这里我想分裂排序字符串的例子:

X-SMTPAPI: {"sub": {"pet": ["dog", "cat"]}, "to": ["[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]m", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"]} 

预先感谢任何帮助,您可以提供!

回答

1

如果您要拆分任意JSON,则需要解析JSON才能知道可以拆分的位置。这是因为逗号和空格可以出现在名称/值以及令牌之间。所以,我首先解析字符串,然后通过使用类似JSON.pretty_generate或通过编写我自己的生成方法来根据需要添加换行符来重新生成输出。

如果你知道你正在处理的JSON的特殊属性,你可能不需要这样做。例如,如果你确信没有空格出现在名称/值和名称/值有一定的最大长度,你可以使用正则表达式这样

str = 'X-SMTPAPI: %s' % json.gsub(/(.{1,72})(+|$\n?)|(.{1,72})/,"\\1\\3\n") 

(我把上面的从这里: http://wiki.sendgrid.com/doku.php?id=smtpapiheader.rb

但是,这会迫使任何超过144个字符的标记分裂(不确定为什么他们选择数字72如果1,000是限制),并且如果它有空白的话可能会在值的中间分裂它。

相关问题