Ios 如何从Objective C中的JSONP中删除回调参数以使其可用?

Ios 如何从Objective C中的JSONP中删除回调参数以使其可用?,ios,objective-c,json,parsing,jsonp,Ios,Objective C,Json,Parsing,Jsonp,我可以使用SBJson库,但我目前只在iOS中使用NSJSONSerialization类。 我正在打电话给你 它返回以下带有参数的Json文件 dict_api.callbacks.id100({…},200,null) 据我所知,是{..}之外的一些无关的东西把我搞得一团糟。使用Objective C,如何删除所有内容,以便只保留{…}?这样我就可以直接查字典了。我将数据存储在NSData对象中,如果这很重要的话。我今天刚开始使用Json,因此我非常感谢您的帮助 NSDictionary

我可以使用SBJson库,但我目前只在iOS中使用NSJSONSerialization类。 我正在打电话给你

它返回以下带有参数的Json文件

dict_api.callbacks.id100({…},200,null)

据我所知,是{..}之外的一些无关的东西把我搞得一团糟。使用Objective C,如何删除所有内容,以便只保留{…}?这样我就可以直接查字典了。我将数据存储在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");

}

这是一个黑客程序,但您可以这样做(找到第一个“{”和最后一个“}”):

编辑-更好的黑客操作

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)];
}
NSRange begin=[responseStringJSONPart rangeOfString:@”(“选项:NSLiteralSearch”);
NSRange end=[responseStringJSONPart rangeOfString:@““选项:NSBackwardsSearch | NSLiteralSearch];
parseFail=(begin.location==NSNotFound | | end.location==NSNotFound | | end.location-begin.location<2);
如果(!parseFail)
{
responseStringJSONPart=[responseStringJSONPart substringWithRange:NSMakeRange(begin.location+1,(end.location-begin.location)-1)];
}

如果您已经在使用“
NSJSONSerialization
”,那么“
dict\u api.callbacks.id100({…},200,null)
”是否作为“
NSDictionary
”对象中某个键的值返回?还是原始JSON流中的回调位?我在NSLog时看到原始数据格式中的“dict_api.callbacks.id100({…},200,null)”。当我试图将其放入具有njsonserialization的nsdictionary时,nsidictionary为空。我还尝试将nsdata转换为nsstring,删除多余的文本,然后将其转换回nsdata,但它仍然无法正确地放入nsdictionary。我知道删除无关的东西是有效的,因为我把它放在了里面,它看起来很好。你能修改你的问题来显示你将JSON流转换成NSDictionary对象的代码吗?好的,我添加了代码,它实际上是在一个字典中生成的。我用苹果专门为JSON制作的URL@“进行了尝试,上面的代码工作得非常好。
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)];
}