0

我在 iOS 上解析 json 数据文件时遇到问题。这是 data.json 文件中的一个示例:

var devs = [
{
"ident":"1",
"firstname":"Jan", 
"lastname":"Kowalski", 
"img":"http://www.placekitten.com/125/125", 
"tech":"iOS, HTML5, CSS, RWD",
"github":"placeholder",
"opensource":"1",
"twitter":"placeholder"
},
{
"ident":"2",
"firstname":"WacĹaw", 
"lastname":"GÄsior", 
"img":"http://www.placekitten.com/124/125",
"tech":"Android, Java, Node.js",
"github":"GÄsiorBKR",
"twitter":"wacek5565"
},

等等。

对于我使用的“普通”json文件:

NSURLResponse *response;
NSError *myError;
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL      URLWithString:@"http://somerailsapplication/posts.json"]     cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0f];
NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&myError];
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&myError];

不幸的是,这个解决方案在这种情况下不起作用。是否有机会在不搜索下载数据中的特定字符串“var dev=[”和最后一个“]”的情况下使其正常工作?

4

2 回答 2

3

响应是 javascript,而不是 JSON,因此您将无法直接使用 JSON 解析器。如果您无法更改服务器输出,最简单的方法是按照您的建议剥离数据的开头和结尾。您还可以将响应嵌入到 HTML 模板中并在 web 视图中对其进行评估,但这似乎需要做很多工作。

于 2013-04-16T15:37:16.003 回答
0

从您获得数据的那一点开始:

NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&myError];
NSMutableString *dataAsString = [[NSMutableString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[dataAsString deleteCharactersInRange:NSMakeRange(0, 11)];
data = [dataAsString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *res = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&myError];

这会将数据转换为字符串,删除前 11 个字符,将其转换回数据,然后正常解析。(我已将其更改为 NSArray,因为您的数据在数组中)

于 2013-04-16T15:49:11.230 回答