0

我正在调用一个 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

4 回答 4

2

您拥有的不是 JSON,而是JSONP。如果您不在 JavaScript 中,我相信正确的处理方式就是如您所说,预处理然后解析。

于 2012-06-22T01:22:01.983 回答
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];
于 2013-06-25T17:44:12.447 回答
0

为什么不在解析 JSON 之前做这样的事情呢?

response = [response stringByReplacingOccurrencesOfString:@"imdb$hello" withString:@""];
于 2012-06-22T01:40:05.977 回答
-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…

您将需要以自己的确定性来制定剥离包装纸的方法。

于 2012-06-22T02:07:07.243 回答