使用 AFNetworking 解析 JSON 时出现问题?
Issue with parsing JSON with AFNetworking?
使用 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];
}
}];
我收到这样的回复,<5b5b7b22 636f756e 74223a22 30227d5d 5d>
但我的实际反应在 Postman 中运行良好。
这是邮递员屏幕
您正在使用 AFHTTPResponseSerializer
(默认响应序列化程序),因此 responseObject
是一个 NSData
对象(<5b5b7b22 636f756e 74223a22 30227d5d 5d>
是 description
的基本 NSData
对象).
可以把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]];
。
使用 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];
}
}];
我收到这样的回复,<5b5b7b22 636f756e 74223a22 30227d5d 5d>
但我的实际反应在 Postman 中运行良好。
这是邮递员屏幕
您正在使用 AFHTTPResponseSerializer
(默认响应序列化程序),因此 responseObject
是一个 NSData
对象(<5b5b7b22 636f756e 74223a22 30227d5d 5d>
是 description
的基本 NSData
对象).
可以把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]];
。