无法从服务器api解析JSON

时间:2017-04-05 06:56:33

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

我正在使用AFNetworking通过以下代码从服务器获取post 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);
}

现在网址工作正常,一切似乎都很好,但问题是我在message块中创建的AuthLoginCompleteBlock字符串响应,NSDictionary响应即将来临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);
            }

收到以下错误

Error Domain = NSCocoaErrorDomain Code = 3840“字符6周围的对象中没有字符串键。” UserInfo = {NSDebugDescription =字符6周围的对象中的值没有字符串键。这意味着服务器的Json格式不正确?但在邮递员中,回应是跟随并且相当不错

{
  "status": "failed",
  "message": "Please enter valid email related to your account."
}

如果我遗漏了某些内容,请发表评论。

2 个答案:

答案 0 :(得分:1)

问题是我已经收到了一本字典,所以我没有必要解析它。错误就是这两行。

 NSString *str = [NSString stringWithFormat:@"%@",responseObject];

 AuthLoginCompleteBlock(YES,str,nil,nil);

我正在将字符串发送到我已经是字典的块。

答案 1 :(得分:0)

action