[英]Unable to parse JSON from server api
我正在使用AFNetworking
通过以下代码从服务器获取API后响应
void (^AuthLoginCompleteBlock)(BOOL success, NSString *message, NSDictionary *response, NSError *error);
-(void)login:(NSString *)user password:(NSString *)password deviceID:(NSString *)deviceID callback:(authRequestCompleteBlock)callback{
AuthLoginCompleteBlock = callback;
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:user,@"data[User][username]]",password,@"data[User][password]]",deviceID,@"data[User][device_id]]", nil];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
[manager POST:[NSString stringWithFormat:@"%@/%@",SERVER_URL,LOGIN] parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *str = [NSString stringWithFormat:@"%@",responseObject];
AuthLoginCompleteBlock(YES,str,nil,nil);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
AuthLoginCompleteBlock(NO,error.description,nil,nil);
}];
NSLog(@"param = %@",parameters);
}
现在,URL可以正常工作,并且一切似乎都很好,但是问题是响应是通过我在AuthLoginCompleteBlock
块中创建的message
字符串来进行的,而NSDictionary
响应正在AuthLoginCompleteBlock
NULL
,并且看起来像这样(消息字符串)
{
message = "Please enter valid email related to your account.";
status = failed;
}
在尝试像这样获取时
NSData *jsonData = [message dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
id json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error];
if(!error) {
NSLog(@"hello = %@", json);
}
else{
NSLog(@"errr = %@",error.description);
}
出现以下错误
错误域= NSCocoaErrorDomain代码= 3840“字符6周围的对象中的值没有字符串键。” UserInfo = {NSDebugDescription =字符6周围的对象中的值没有字符串键。这意味着服务器的Json格式不正确? 但在邮递员中,响应如下,效果很好
{
"status": "failed",
"message": "Please enter valid email related to your account."
}
如果我遗漏了一些东西,请发表评论。
问题是我已经在买字典了,所以我就不用解析它了。 错误是这两行。
NSString *str = [NSString stringWithFormat:@"%@",responseObject];
AuthLoginCompleteBlock(YES,str,nil,nil);
我正在将字符串发送到已经是字典的块中。
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
NSDictionary *parameters = @{
@"user": @"login",
@"password": txtFieldPassword.text,
@"device": @"ios",
@"deviceToken": strToken,
};
NSLog(@"parameters is ====%@",parameters);
manager.responseSerializer = [AFJSONResponseSerializer
serializerWithReadingOptions:NSJSONReadingAllowFragments];
[manager POST:@"yourUrl" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
{
NSLog(@"success!%@",responseObject);
[self successfullLogin:responseObject];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
{
NSLog(@"error: %@", error);
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.