【问题标题】:Parsing JSON response from URL gives <null>从 URL 解析 JSON 响应给出 <null>
【发布时间】:2013-03-19 15:48:24
【问题描述】:

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

- (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 的转换。我调查发现问题是因为有几个外来字符(中文什么的),导致解析过程出错。

我不知道如何解决这个问题。有没有人有任何想法?

【问题讨论】:

  • 你的 url 返回一个有效的 json 响应吗?
  • 是的。我将它粘贴到网络浏览器上,它确实如此。
  • 您应该使用NSJSONSerialization 调用的error: 参数并显示错误消息。数据的内容也将有助于发现问题,例如NSLog(@"%@", [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding])
  • 你能把网址分享给我们吗?
  • 对不起,我不认为业主会喜欢这样。 :) 但我确实解决了问题。

标签: ios json nsdictionary nsurlconnection nsdata


【解决方案1】:

我玩弄了类和编码选项,最后做了以下事情,解决了这个问题。

- (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! :)

}

【讨论】:

  • 我不知道这是临时解决方法还是实际解决方案,但它确实有效。 :)
  • 由于您没有显示任何数据或错误消息,因此没有人可以确定这是否是正确的解决方案。
  • 什么是“收到的数据”?
  • 这是一个 NSMutableData 对象,你应该在你的类中初始化它,它将接收从你的请求返回的数据。这是一个老问题,虽然它仍然是发送 HTTP GET 请求的正确方法之一,但我已经迁移到 AFHTTPNetworking 2.0。使用和理解要简单得多。
猜你喜欢
  • 2016-01-25
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多