【问题标题】:Unable to parse JSON from server api无法从服务器 api 解析 JSON
【发布时间】:2017-04-05 06:56:32
【问题描述】:

我正在使用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);
}

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

出现以下错误

错误域=NSCocoaErrorDomain 代码=3840“字符 6 周围的对象中的值没有字符串键。” UserInfo={NSDebugDescription=在字符 6 附近的对象中没有值的字符串键。这意味着来自服务器的 Json 格式不正确?但是在邮递员中,响应如下并且非常好

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

如果我遗漏了什么,请发表评论。

【问题讨论】:

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


    【解决方案1】:

    问题是我已经得到了一个字典,所以我不需要解析它。错误是这两行。

     NSString *str = [NSString stringWithFormat:@"%@",responseObject];
    
     AuthLoginCompleteBlock(YES,str,nil,nil);
    

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

    【讨论】:

      【解决方案2】:
      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);
      
      
              }];
      

      【讨论】:

      • 好像AFNetworking 3.0没有AFHTTPRequestOperationManager。
      • 是的 AFHTTPRequestOperationManager 不包含在 pod AFNetworking 3.0 中
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多