在iOS应用程序中解析JSON对象

时间:2016-01-05 05:00:37

标签: ios objective-c json

您好,我在项目中对Ios来说非常新,我正在整合网络服务,这很好。

当我向服务器发送正确的请求时,响应来自下面的服务器"我的第一个响应"。

如果我们向服务器发送了错误的请求,那么响应来自服务器,如下面的#34;我的第二个响应。"

所以我们不知道在发送请求后我们从服务器获得哪种类型的Json对象。

这里我的主要要求是如果我们从服务器得到正确的响应(如下面的第一个响应),那么我们可以保存我们想要的所有元素。

如果我们得到错误的响应(如下面的第二个响应),那么我们如何找到以及如何打印该消息,因为有时我们得到适当的响应,有时我们从服务器得到错误的响应,所以我们怎么能找到,怎么能我们保存这个回复。

请帮帮我。

如果发送正确的请求,则响应: -

responseObject = {

           {
            Name = Broad;
            DeptNo = A00;
            BatchNo = 23;
            DeptId = 120;
          },

          {
            Name = James;
            DeptNo = B00;
            BatchNo = 23;
            DeptId = 123;
          },
     }

如果我们发错了请求,请回复: -

responseObject = {

    error = 1;
    message = "Invalid Code";
}

我的代码: -

- (void)viewDidLoad {
    [super viewDidLoad];

    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                              @"12345678"  ,@"scacode",
                              nil];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"my url"]
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:15.0];

    [MBProgressHUD showHUDAddedTo:self.view animated:YES];

    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPMethod:@"POST"];

    NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        dispatch_async(dispatch_get_main_queue(), ^{
            [MBProgressHUD hideHUDForView:self.view animated:YES];
        });

        if (error) {

            NSLog(@"dataTaskWithRequest error: %@", error);
        }

        if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
            NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
            if (statusCode != 200) {                

                NSLog(@"Expected responseCode == 200; received %ld", (long)statusCode);
            }
        }

         NSError *parseError;
         id responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];

         if (!responseObject) {

             NSLog(@"JSON parse error: %@", parseError);

         } else {

             NSLog(@"responseObject = %@", responseObject);
         }
    }];
    [task resume];
}

4 个答案:

答案 0 :(得分:0)

在您的情况下,您可以使用以下内容:

NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];

if([responseObject objectForKey:@"error"] == nil)
{
   //You are getting correct response
}
else{
   // You are getting response with error
}

答案 1 :(得分:0)

您可以检查响应是否有错误的密钥。否则,您可以在服务器端使用新变量来处理所有响应,例如statusCode。因此,如果您收到错误或成功,可以将服务器端设置为statusCode。这样做非常明确。

答案 2 :(得分:0)

您可以使用UIAlertView显示错误消息

if([responseObject objectForKey:@"error"] == nil)
{
   //You are getting correct response

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Your Message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
   [alert show];
}
else
{
   // You are getting response with error
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Error Message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
   [alert show];
}

答案 3 :(得分:0)

我猜你没有发布整个responseObject(发送正确的请求时)。假设您在响应正确时获得 错误= 0 键,则可以执行以下操作:

NSMutableDictionary *jsonDictionary= [NSMutableDictionary alloc]init]

jsonDictionary=responseObject;

if([jsonDictionary valueForKey:@"error"]==@"0"]
{
//do some stuff
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Invalid Request" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
}