我在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 = [”和最后一个“]”的情况下工作?
答案 0 :(得分:3)
响应是javascript,而不是JSON,因此您将无法直接使用JSON解析器。如果您无法更改服务器输出,最简单的方法是删除数据的开头和结尾,如您所建议的那样。您还可以将响应嵌入到HTML模板中并在Webview中对其进行评估,但这似乎还有很多工作要做。
答案 1 :(得分: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,因为您的数据在数组中)