我正在调用一个API,它应该返回一个JSON文件。以下是API链接:http://sg.media-imdb.com/suggests/h/hello.json
问题是:这个JSON文件包含了JSON响应的内容
imdb$hello(JSON)
所以我能看到的最好的方法是使用正则表达式来提取我需要的东西。类似于:~/\((.*)\)/
。
但是我想使用新的JSON iOS5 API,据我所知,它只接受NSData作为输入。所以,我不想将我的响应从NSData转换为NSString,使用正则表达式解析它,并将其放在另一个NSData对象中。
任何人都可以看到更好/更清晰的JSON解析解决方案吗?
答案 0 :(得分:2)
你拥有的不是JSON,而是JSONP。如果你不是在JavaScript中,我相信正确的处理方式就像你说的那样,预处理然后再解析。
答案 1 :(得分:1)
NSError *jsonError = nil;
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSRange range = [jsonString rangeOfString:@"("];
range.location++;
range.length = [jsonString length] - range.location - 1;
jsonString = [jsonString substringWithRange:range ];
NSJSONSerialization *jsonResponse =
[NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]
options:0
error:&jsonError];
答案 2 :(得分:0)
为什么在解析JSON之前你不只是做这样的事情?
response = [response stringByReplacingOccurrencesOfString:@"imdb$hello" withString:@""];
答案 3 :(得分:-1)
这个字符串有多常规。 总是会在那里吗?
// Remove @"imdb$hello(" and @")" that wraps the response string.
NSRange JSONRange = NSMakeRange(11, [responseString length] - 12);
NSString *JSONString = [responseString substringWithRange:JSONRange];
// Now you can parse as normal…
你需要用自己的确定性来制作剥离包装纸的方法。