解析JSONP响应的最佳方法

时间:2012-06-22 01:19:53

标签: objective-c regex json ios5

我正在调用一个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解析解决方案吗?

4 个答案:

答案 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…

你需要用自己的确定性来制作剥离包装纸的方法。