如果你必须
如果您坚持(或以某种方式被迫)使用 JSON 文本字符串,则最好使用现成的模板库。
GRMustache https://github.com/groue/GRMustache是 ObjC 的 Mustache 模板库,非常适合生成非 HTML/XML,因为它实际上只是一个愚蠢的字符串插值器。GRMustache 页面上有大量文档,Mustache.js会自行解释(虽然是以 HTML 为中心的方式。)
最终,您可以:
{ "stuff": [
{ "class": "{{ FOO_CONSTANT }}" } ] }
另一方面,DMTemplates https://github.com/mierau/DMTemplates是一个更通用的模板库。
此 NSString 文字中的示例模板语法:
engine.template = @"{ \"stuff\": [\n { \"class\": \"<? FOO_CONSTANT />\" } ] }";
您可以通过字典为其提供值,它还具有一些不错的功能,例如foreach
循环甚至函数调用来填充值。当然,模板可以位于 unicode 文本文件中,并在运行时以解释的形式读取,而不是硬字符串。
最后,我注意到 M4 模板/宏语言在 ObjC 世界中并没有得到太多的喜爱,它是许多 C/C++ 程序员生成文本的老生常谈。(由您可能知道的 Brian Kernighan 和 Dennis Ritchie 设计。)看看一个非常古老的模板库及其所具有的功能(现在大约 40 年)可能具有教育价值
但是,我认为DMTemplate是您想要的“它只是有效”的解决方案。({{ braces }}
Mustache 中的那些也会让我在使用 JSON 时感到紧张。)
顺便说一句,还有 MGTemplate 引擎,但它又使用了双括号,所以对于生成 JSON 不是很好。
理想吗?
好吧,我建议您在此构建一个带有模板引擎废话的 JSON 字符串,并构建一个 NSDictionary / NSArray 对象的集合并使用NSJSON
或任何其他流行的 ObjC JSON 库将它们序列化,这样您就可以消除任何格式/引用错误垃圾. 最终无论你做什么都是从数据开始的,所以这确实是处理它的方法,像 JSON 这样的传输格式的想法不是手工编写它们,除非有人拿着枪指着你的头,(但这很好如果它们可以打印得很漂亮,那么您就可以阅读它们。)所以...呃,这样做,对吗?对。
http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html