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”是由浏览器设置的,AFAIK 查询参数的名称不是标准化的。jQuery 使用 jsonCallback。其他的使用 json 或回调。因此,必须检查请求 url 中的回调名称,并且必须使用该函数名称来包装 json 数据。

于 2012-04-18T14:38:03.567 回答