AFNetworking为什么解析服务器的json?

时间:2012-12-25 07:26:23

标签: iphone ios json asihttprequest afnetworking

我使用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

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

,那不是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。

为什么?

1 个答案:

答案 0 :(得分:3)

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

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

显然用保留jsonData个对象的变量替换NSData。您可以在声明失败之前检查它。

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

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


通常,当您从网络服务器下载数据时,当您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]);