我可以使用SBJson库,但是我目前仅在iOS中使用NSJSONSerialization类。
我正在打电话给
http://www.google.com/dictionary/json?callback=dict_api.callbacks.id100&q=test&sl=en&tl=en&restrict=pr%2Cde&client=te
并返回以下带有参数的Json文件。
dict_api.callbacks.id100({...},200,null)
据我所知,是{..}之外的多余内容使我感到困惑。使用 objective-c ,如何删除所有内容,仅保留{...}?这样我就可以直接去NSDictionary。如果这很重要,我会将数据存储在NSData对象中。我今天才开始与Json合作,因此我非常感谢您的帮助。
NSDictionary *allDataDictionary = [NSJSONSerialization JSONObjectWithData:self.webData options:0 error:nil];
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[self.webData setLength:0];
NSLog(@"1");
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"Failed with error");
NSLog(@"2");
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.webData appendData:data];
NSLog(@"3");
}
最佳答案
这是一个hack,但是您可以执行此操作(找到第一个“{”和最后一个“}”):
// Decode the web response data into a string, then:
NSRange begin = [someString rangeOfString:@"{" options:NSLiteralSearch];
NSRange end = [someString rangeOfString:@"}" options:NSBackwardsSearch|NSLiteralSearch];
// Add error checking!
NSString *jsonPart = [someString substringWithRange:NSMakeRange(begin.location, (end.location - begin.location) + 1)];
编辑-更好地表达
JSON可能不是对象,因此只需抓住JSONP的对象即可。
NSRange begin = [responseStringJSONPart rangeOfString:@"(" options:NSLiteralSearch];
NSRange end = [responseStringJSONPart rangeOfString:@")" options:NSBackwardsSearch|NSLiteralSearch];
parseFail = (begin.location == NSNotFound || end.location == NSNotFound || end.location - begin.location < 2);
if (!parseFail)
{
responseStringJSONPart = [responseStringJSONPart substringWithRange:NSMakeRange(begin.location + 1, (end.location - begin.location) - 1)];
}
关于ios - 如何在Objective C中从JSONP中删除回调参数以使其可用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17129476/