0

インスタンス化のためのクラスの名前を含むJSONがいくつかあり、タイプミスによって問題が発生するのを回避しようとしています。

とにかく、JSON内の文字列または定数を補間して、エラーが発生しにくくすることができるかどうか疑問に思っています...

例えば:

{ "stuff": [
           { "class": "foo" } ] }

これがルビーで、このfile.json.erbを作成できた場合、次のようなことができます。

{ "stuff": [
           { "class": "<%= FOO_CONSTANT %>" }] }

..。

XCodeやObjective-Cとリモートで似たようなことができる方法はないかと思います。

4

2 に答える 2

1

あなたがしなければならない場合

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

于 2013-01-04T13:50:04.487 に答える
0

キー名を調べて、解析する前にそれらを置き換えることができますか? 何かのようなもの:

NSMutableString *jsonString = …;

NSDictionary *environment = @{
    @"FOO_CONSTANT" : @"foo"
};

for (NSString *key in [environment allKeys]) {
    NSString *pattern = [NSString stringWithFormat:@"<%= %@ %>", key];
    [jsonString replaceOccurrencesOfString:pattern withString:environment[key]];
}

もちろん、これはキーと値がプレーンなアルファベット文字列であることを前提としているため、JSON 構文を壊すことはできません。

于 2013-01-04T07:25:25.003 に答える