我可以使用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/

10-09 01:39