简体   繁体   中英

How to solve json Error in ios 7?

Am using following code.

+(void)getQuarterList:(NSString *)user_id
{
    if ([self checkInternet])
    {
        NSString *url=[NSString stringWithFormat:@"%@/api/v1/quarters.json",MainURL];
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        NSDictionary *parameters = @{@"id":user_id};
      //  NSDictionary *parameters = @{};

        // NSDictionary *parameters = @{@"id":user_id,@"auth_token":auth_token};
        [manager POST:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject)
         {
             NSDictionary *dict=[[NSDictionary alloc]initWithDictionary:responseObject];
              //NSMutableArray *dict=[[NSMutableArray alloc]initWithArray:responseObject];
             NSLog(@"dict%@",dict);
             if ([dict valueForKey:@"Success"])
             {
                 NSNotification *notif1 = [NSNotification notificationWithName:@"quarterDetailsNotifier" object:[dict valueForKey:@"Success"]];
                 [[NSNotificationCenter defaultCenter] postNotification:notif1];
             }
             else if ([dict valueForKey:@"noData"])
             {
                 NSNotification *notif1 = [NSNotification notificationWithName:@"noDateNotifier" object:[dict valueForKey:@"Error"]];
                 [[NSNotificationCenter defaultCenter] postNotification:notif1];
             }

         } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
             NSLog(@"Error: %@", error);
             NSNotification *notif1 = [NSNotification notificationWithName:@"quarterDetailsFailNotifier" object:error];
             [[NSNotificationCenter defaultCenter] postNotification:notif1];
         }];
    }
    else
    {
        NSNotification *notif1 = [NSNotification notificationWithName:@"internetFailNotifier" object:nil];
        [[NSNotificationCenter defaultCenter] postNotification:notif1];
    }
}

am having following error

2014-05-20 15:39:33.610 TMLP[2770:a0b] The internet is working via WIFI.
2014-05-20 15:39:35.733 TMLP[2770:a0b] Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x8e4a1a0 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set., NSUnderlyingError=0x8e65ca0 "Request failed: not found (404)"}
2014-05-20 15:39:35.734 TMLP[2770:a0b] -[NSError length]: unrecognized selector sent to instance 0x8e4a180

2014-05-20 15:39:35.737 TMLP[2770:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSError length]: unrecognized selector sent to instance 0x8e4a180'

* First throw call stack: how to solve this error

You post error as an object of NSNotification . And in notifcation handler you use it as NSString or other object that has method length .

First things first.
Your obtained JSON text should always start with a "[" or "{" for the parser to recognise it. And the reason you are getting this error is clearly because this is not fulfilled. I suggest you check your JSON text through a JSON validator which is available online.
And the Second thing I Suggest is to use for JSON Serialization/Deserialization is

NSJSONSerialization

And Example would be like this :

NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error: &error];

The options:NSJSONReadingAllowFragments might solve your problem of parsing fragments that you are getting right now. If this doesn't help, another option would be to extract out the proper JSON string from the obtained fragmented string.This means eliminating the extra unwanted characters from the starting and end of the string.

An Example would be like this :

NSURL *url=[NSURL URLWithString:@"yourURL"];
    NSData *response = [NSData dataWithContentsOfURL:url];
    NSString *badjsonData = [NSString stringWithUTF8String:[response bytes]];
    NSString *goodJsonData = [badjsonData substringFromIndex:76];
    NSString *finaljsonData = [goodjsonData substringToIndex:[goodjsonData length]-9];
    NSData *goodData = [finaljsonData dataUsingEncoding:NSUTF8StringEncoding];
    NSError *error;
    NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData:goodData options:NSJSONReadingAllowFragments error: &error];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM