【问题标题】:AFNetworking why parse server's json? [closed]AFNetworking 为什么要解析服务器的 json? [关闭]
【发布时间】:2012-12-25 07:26:22
【问题描述】:

我使用AFNetworking 请求服务器,但我得到这样的输出:

2012-12-25 15:16:47.578 SmsForNewYear[3825:c07] <3c21444f 43545950 45206874 6d6c2050 55424c49 4320222d 2f2f5733 432f2f44 54442058 48544d4c 20312e30 20547261 6e736974 696f6e61 6c2f2f45 4e222022 68747470 3a2f2f77 77772e77 332e6f72

不是json,如果我加[self setDefaultHeader:@"Accept" value:@"application/json"];

返回:

SmsForNewYear[3920:c07] getNewSms:Expected content type {(
"text/json",
"application/json",
"text/javascript"
)}, got text/html

但是我用的是浏览器,看起来是这样的

{"rs_code":"200","data":{"sms_cate_list":[{"id":"26","name":"\u559c\u5e86","likes":"0","sms_num":"1","order_id":"1","is_index":"0","update_time":"1355932115"}

是json。

另一方面,我使用asihttprequest 可以返回json。

为什么?

【问题讨论】:

  • 顺便说一下,解码NSData,它看起来像是一个HTML响应的开始(但这里还不足以看到它所说的内容)。当你 NSLog [[NSString alloc] initWithData:jsonData] 时,看看它是什么会很有趣,但它可能是关于 URL 错误或类似的错误消息。
  • 谢谢,我发现错了,不是rest风格,我这样写 [AFSmsAPIClient sharedClient] getPath:@"sn=sms.sms.display" parameters:nil ,看起来像facebook风格,所以 sn=sms.sms.display 是 get 方法的参数
  • 酷。无法根据NSDataNSLog 进行诊断。我最初(错误地)假设它可能是一个有效的 JSON 响应,但经过进一步检查,很明显服务器报告了一些错误(但您包含的 NSData 不足以诊断它,因为它被切断了)。不管怎样,你找到了还好。将来,如果您在 NSData 对象中获得服务器响应,则将其转换为 NSString(如下所述)将帮助您更快地诊断问题。

标签: iphone ios json asihttprequest afnetworking


【解决方案1】:

您的第一个NSLog 是典型的NSData 日志结果,很难阅读。如果你想查看它以进行调试,你可以

NSLog(@"%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);

显然将jsonData 替换为持有NSData 对象的任何变量。您可以在宣布失败之前对其进行检查。

当我解码您记录的 NSData 字符串时,它似乎是 HTML 文件的开头,所以我敢打赌您的网络服务器报告了错误。您必须查看该 HTML 的 NSString 版本以找出问题所在(您没有包含足够的内容供我们诊断,因为 NSDataNSLog 过早地切断了结果)。

在诊断问题方面,您必须向我们展示上述NSLog生成的消息。您可能还需要向我们展示您的 AFNetworking 代码,您在其中提出 Web 服务请求。


通常,当您从 Web 服务器下载数据时,当您 NSLog NSData 结果时,您会看到类似这样的神秘信息。然后,您可以非常高兴地传递给NSJSONSerialization

NSError *error = nil;
NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:jsonData
                                                           options:0
                                                             error:&error];
if (error != nil)
    NSLog(@"Error in JSON: %@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);

【讨论】:

  • [[AFSmsAPIClient sharedClient] getPath:@"sn=sms.sms.display" 参数:nil 成功:^(AFHTTPRequestOperation *operation, id JSON) { NSLog(@"%@",operation. responseString);} 我通过这个发现这个错误。
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多