Search code examples
objective-cnsjsonserialization

Parsing Json to object giving "null" Value


Unable to parse this json data to object. Same code i tried with other URL, working correct. Please Suggest where i am doing wrong?

-(void)callAPI{
    NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https:s.json"]];
    NSError *error=nil;
    id response=[NSJSONSerialization JSONObjectWithData:data options:
                 NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:&error];

    if (error) {
        NSLog(@"%@",[error localizedDescription]);
    } else {

        NSLog(@"%@",response);}}

Output The data couldn’t be read because it isn’t in the correct format.


Solution

  • I got the very perfect solution for your question which works fine now.Please check the below answer

    - (void)callAPI 
    {
    
      NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
      [request setHTTPMethod:@"GET"];
      [request setURL:[NSURL URLWithString:@"https://dl.dropboxusercontent.com/s/2iodh4vg0eortkl/facts.json"]];
      [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:
      ^(NSData * data,
        NSURLResponse * response,
        NSError * error) {
          NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
          NSLog(@"jsonString is: %@", jsonString);
          NSData *dataCon = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
          id jsonVal = [NSJSONSerialization JSONObjectWithData:dataCon options:0 error:nil];
          if([jsonVal isKindOfClass:[NSDictionary class]]) {
              NSLog(@"The response starts with NSDictionary");
              NSArray *arrJsonVal = [jsonVal objectForKey:@"rows"];
              NSMutableArray *arrTitle = [[NSMutableArray alloc]init];
              NSMutableArray *arrDesc = [[NSMutableArray alloc]init];
              NSMutableArray *arrImage = [[NSMutableArray alloc]init];
              for(NSDictionary *dict in arrJsonVal) {
                  NSString *strTitle = [dict objectForKey:@"title"];
                  NSString *strDesc = [dict objectForKey:@"description"];
                  NSString *strImage = [dict objectForKey:@"imageHref"];
    
                  [arrTitle addObject:strTitle];
                  [arrDesc addObject:strDesc];
                  [arrImage addObject:strImage];
              }
              NSLog(@"arrTitle is - %@",arrTitle);
              NSLog(@"arrDesc is - %@",arrDesc);
              NSLog(@"arrImage is - %@",arrImage);
    
          }else {
              NSLog(@"The response starts with NSArray");
          }
      }] resume];
    
    }
    

    The Printed results are

    enter image description here enter image description here

    After that

    enter image description here

    Then Array results are

    enter image description here enter image description here

    Finally the results are

    enter image description here