我有自己的SBJson库,但我目前只在iOS中使用NSJSONSerialization类。 我打电话给
并返回带有参数的以下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");
}
答案 0 :(得分:2)
这是一个黑客,但你可以这样做(找到第一个'{'和最后'}'):
// 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的parens。
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)];
}