AFNetworking 3.0没有从响应中得到json

时间:2016-06-26 04:34:22

标签: ios objective-c iphone json afnetworking-3

我正在发布请求获取响应responseObject但是在数据格式中。为什么它不是以json格式出现的。

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    NSString *urlstr=[SERVER_API_URL stringByAppendingString:methodType];
    [manager POST:urlstr parameters:input progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"success! data=%@",responseObject);
        NSLog(@"responseObject==%@",responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error: %@", error);
    }]

这里是我在NSLog中获取的responseObject

success! data=<227b2261 63636573 735f746f 6b656e22 3a224d58 31563255 736c3053 47367654 706f2d4d 76346459 672d3369 35684c4e 796d4245 4e674e4d 56574b5a 6c394476 3937536e 364a4e7a 3952524b 556d4f50 717a485f 7748416e 63675849 70626e43 35703647 4c4f324d 7a773761 6b366d4d 6c4b6465 36766d62 3769434a 4973336c 3544674a 74345a4f 48523338 786c5270 554a4e56 5762356c 39347067 72417978 34555a47 35376444 456a4c62 39394d4b 55517358 546a3933 3751614e 526f5073 4c437859 4b5a7a6e 79483533 4f553555 4266457a 6f396732 5f767262 31736278 58334174 63467072 4a674d70 45682d45 33613750 346d3344 2d64706a 5a575365 7a4a6155 74463256 5a463733 6c716c32 5933222c 22746f6b 656e5f74 79706522 3a226265 61726572 222c2265 78706972 65735f69 6e223a38 36333939 7d22>

当我从邮递员客户端传递请求时,我得到了所有正确的数据。这是屏幕截图。 enter image description here

3 个答案:

答案 0 :(得分:5)

按以下方式更改您的代码:

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
//manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];

NSString *urlstr=[SERVER_API_URL stringByAppendingString:methodType];
[manager POST:urlstr parameters:input progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSLog(@"[success]: %@",responseObject);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"[error]: %@", error);
}]

答案 1 :(得分:2)

设置可接受的内容类型:

[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithArray:@[@"application/json"]]];

然后将回复转换为NSDictionary

NSDictionary *response = responseObject;
NSLog("api response: %@", response);

请记住处理任何错误。

旁注:如果您使用自签名SSL,则可以通过以下方式允许无效证书:

manager.securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy.validatesDomainName = NO;

答案 2 :(得分:0)

我得到了同样的错误,但是y修复它表明JSON要打印的位置

在我之前

NSLog(@"JSON usando AFNetworking: %@",responseObject);

现在可以使用

NSLog(@"JSON usando AFNetworking: %@",[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);