【问题标题】:Issue with parsing JSON with AFNetworking?使用 AFNetworking 解析 JSON 的问题?
【发布时间】:2017-07-21 06:33:46
【问题描述】:

使用 AFNetworking 无法从服务器获取数据。

这是我的一些代码,

NSString *serviceUrl = [NSString stringWithFormat:@"%@%@", BASE_URL,serviceName];
NSString *paramString = [NSString stringWithFormat:SERVICE_PARAMS, parametersString, DB_NAME];
NSData* data = [paramString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *parametersDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSString *postLength = [NSString stringWithFormat:@"%ld", [data length]];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[manager.requestSerializer setTimeoutInterval:SERVICE_TIMEOUT];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
[manager.requestSerializer setValue:postLength forHTTPHeaderField:@"Content-Length"];
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
manager POST:serviceUrl parameters:parametersDictionary progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    if (self.delegate) {
        [self.delegate onServiceSuccess:(NSDictionary *)responseObject];
    }
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    if (self.delegate) {
        [self.delegate onServiceFailed];
    }
}];

我得到这样的回应, 但我的实际反应在邮递员中运行良好。 这里是邮递员 Screen

【问题讨论】:

  • 你使用了AFHTTPResponseSerializer,所以响应对象是NSData类。你可以自己用NSArray *myJSONArray = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];,或者改成AFHTTPResponseSerializer,改用AFJSONResponseSerializer(或者类似的,不知道真名),它会帮你反序列化。
  • 另外,请注意,即使是序列化的,您的 JSON 答案也是一个 NSArray,而不是 NSDictionary(正如您似乎已经投射的那样)。你可能想做[self.delegate onServiceSuccess:myJSONObjectResponseArray[0][0]]

标签: objective-c json post afnetworking


【解决方案1】:

您使用的是AFHTTPResponseSerializer(默认响应序列化程序),因此responseObjectNSData 对象(<5b5b7b22 636f756e 74223a22 30227d5d 5d>NSData 对象的基本description

您可以将AFHTTPResponseSerializer替换为JSON对应的AFJSONResponseSerializer,或者自己进行序列化:

NSArray *myJSONArray = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];

请注意,您的 JSON 是一个字典数组数组。所以这样做:[self.delegate onServiceSuccess:(NSDictionary *)responseObject]; 只是一个演员,而且是一个糟糕的演员。 如果您真的只想要{"count":"96"},请改用[self.delegate onServiceSuccess:myJSONObjectResponseArray[0][0]];

【讨论】:

  • 工作正常。我正在将字典更改为数组。
猜你喜欢
  • 2013-06-24
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多