Ios 从URL解析JSON响应会给出<;空>;

Ios 从URL解析JSON响应会给出<;空>;,ios,json,nsdictionary,nsurlconnection,nsdata,Ios,Json,Nsdictionary,Nsurlconnection,Nsdata,我正在以以下方式向服务器发送请求: - (void) getData { NSString *url= @"http://example.com"; NSMutableURLRequest *theRequest= [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:N

我正在以以下方式向服务器发送请求:

- (void) getData
{
    NSString *url=  @"http://example.com";

    NSMutableURLRequest *theRequest= [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
                                                         cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                     timeoutInterval:10.0];

exampleConnection =[[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES];

}
对此,响应是一个JSON文件,我将对其进行如下解析:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"Connection did finish loading %@",[connection currentRequest]);

    NSDictionary *exampleDictionary = [NSJSONSerialization JSONObjectWithData:receivedData options: NSJSONReadingAllowFragments error:nil];

    NSLog(@"%@", exampleDictionary); // which gives me null

}
早些时候的反应很好。但现在它给了我一个空值,这显然是因为有什么东西阻碍了从JSON到NSDictionary的转换。我调查发现,问题是因为有几个外国字符(中文或其他什么),解析过程出错了


我不知道如何解决这个问题。有人有什么想法吗

我尝试了类和编码选项,最后做了以下工作,解决了问题

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    NSLog(@"Connection did finish loading %@",[connection currentRequest]);

    NSString *res = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding];

    NSDictionary *exampleDictionary = [NSJSONSerialization JSONObjectWithData:[res dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingAllowFragments error:nil];

    NSLog(@"%@", exampleDictionary); // gives the actual data! :)

}

我使用了类和编码选项,最后做了以下操作,解决了问题

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    NSLog(@"Connection did finish loading %@",[connection currentRequest]);

    NSString *res = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding];

    NSDictionary *exampleDictionary = [NSJSONSerialization JSONObjectWithData:[res dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingAllowFragments error:nil];

    NSLog(@"%@", exampleDictionary); // gives the actual data! :)

}

您的url是否返回有效的json响应?是。我将它粘贴到web浏览器上,它确实如此。您应该使用
NSJSONSerialization
调用的
error:
参数并显示错误消息。数据的内容也有助于发现问题,例如,
NSLog(@“%@,[[NSString alloc]initWithData:receivedData encoding:NSUTF8StringEncoding])
您能与我们共享URL吗?对不起,我认为所有者不会喜欢这样做。:)但我确实解决了这个问题。你的url是否返回有效的json响应?是的。我将它粘贴到web浏览器上,它确实如此。您应该使用
NSJSONSerialization
调用的
error:
参数并显示错误消息。数据的内容也有助于发现问题,例如,
NSLog(@“%@,[[NSString alloc]initWithData:receivedData encoding:NSUTF8StringEncoding])
您能与我们共享URL吗?对不起,我认为所有者不会喜欢这样做。:)但我确实解决了这个问题。我不知道这是一个临时的解决办法还是实际的解决办法,但它是有效的。:)由于您没有显示任何数据或错误消息,因此没有人能够确定这是否是正确的解决方案。什么是“接收到的数据”?它是一个NSMutableData对象,您应该在类中初始化它,它将接收从您的请求返回的数据。这是一个老问题,尽管它仍然是发送HTTP GET请求的正确方法之一,但我已经迁移到AFHTTPNetworking 2.0。使用和理解起来要简单得多。我不知道这是临时解决方法还是实际解决方案,但它确实有效。:)由于您没有显示任何数据或错误消息,因此没有人能够确定这是否是正确的解决方案。什么是“接收到的数据”?它是一个NSMutableData对象,您应该在类中初始化它,它将接收从您的请求返回的数据。这是一个老问题,尽管它仍然是发送HTTP GET请求的正确方法之一,但我已经迁移到AFHTTPNetworking 2.0。使用和理解起来要简单得多。