2012-04-18 7 views
1

次のコードを使用してJSONファイルを作成します。MacOSでJSONPを作成するには?

// Some data in keys and vals. 
NSDictionary* dictionary = [NSDictionary dictionaryWithObjects:vals forKeys:keys]; 
NSError* writeError = nil; 
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dictionary 
        options:NSJSONWritingPrettyPrinted error:&writeError]; 
NSString* path = @"json.txt"; 
[jsonData writeToFile:path atomically:YES]; 

JSONPファイルを出力するにはどうすればよいですか?私が使用できるCocoaフレームワークはありますか?

更新:一方で、私は間に合わせと-ソリューションを使用する:私はちょうどディスクに前に書かれた文字列に欠落しているJSONP機能を追加するJSONファイルを読み込みます。その後、もう一度ファイルを書きます。私はそれが私の質問に対する答えに値するものではないと思う。ですから、私はこの質問をより賢明な解決策にしておきます。

+0

がディスクに書き込まれ、関数呼び出しでラップすることは、よりになりますファイルをディスクに書き込んでそこから読み戻すよりも効率的です。 – omz

+0

確かにomz。答えとしてサンプルコードを自由に記述してください。 – JJD

答えて

2

JSONデータを文字列に変換し、関数呼び出しでラップしてファイルに書き込むことができます。例:

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dictionary 
                options:NSJSONWritingPrettyPrinted 
                error:NULL]; 
NSMutableString *jsonString = [[[NSMutableString alloc] initWithData:jsonData 
                  encoding:NSUTF8StringEncoding] autorelease]; 
[jsonString insertString:@"functionCall(" atIndex:0]; 
[jsonString appendString:@");"]; 
[jsonString writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 

(私はより良いメモリ効率のために、ここで変更可能な文字列を使用しています。)それ_before_文字列に `jsonData`の変換

+0

ニース。最初に、NSStringにwritetoFile:セレクタがあることがわかりませんでした。どうも! – JJD

0

私はobjective-cやCocoaについてよくわかりません。 (私はMacOS上でPythonを使ってJSNOPレスポンスを作成しています)、それは簡単なことです。 は、基本的な考え方は、JavaScriptの関数呼び出しでJSONデータをラップすることです:

functionCall({"Name": "Foo", "Id" : 1234, "Rank": 7}); 

トリッキーな部分は、関数名は、「関数呼び出し」が、ブラウザによって設定され、私の知る限りそのクエリパラメータの名前があるということです標準化されていない。 jQueryはjsonCallbackを使用します。他の人はjsonまたはコールバックを使用します。したがって、要求URLはそのコールバック名をチェックされなければならず、その関数名はjsonデータをラップするために使用されなければなりません。

+0

申し訳ありませんがEricですが、私はこのコンセプトには問題ありません。問題は、Objective-CでJSONPを実行する方法です。 – JJD

関連する問題