1

次のコードを使用して JSON ファイルを作成します。

// 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 フレームワークはありますか?

更新:それまでの間、私は簡単な解決策を使用しました。ディスクに書き込んだばかりの JSON ファイルを読み込み、欠落している JSONP 関数を文字列に追加しました。次に、もう一度ファイルを書き込みます。それは私の質問に対する答えである価値がないと思います。したがって、この質問はより賢明な解決策として残します。

4

2 に答える 2

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];

(ここでは、メモリ効率を高めるために可変文字列を使用しています。)

于 2012-04-25T22:47:57.537 に答える
0

Objective-C も Cocoa も知りません。(私は MacOS で python を使用して JSNOP 応答を作成します)、それは簡単なことです。基本的な考え方は、JSON データを JavaScript 関数呼び出しでラップすることです。

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

注意が必要な部分は、関数名「functionCall」がブラウザーによって設定され、そのクエリパラメーターの名前が標準化されていないことです。jQuery は jsonCallback を使用します。その他はjsonまたはコールバックを使用します。そのため、リクエスト URL でそのコールバック名を確認し、その関数名を使用して json データをラップする必要があります。

于 2012-04-18T14:38:03.567 に答える