Invalid value around character 0, NSJSONSerialization

假如想象 提交于 2019-12-23 08:27:37

问题


I make a get from my server and I get a valid response:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // Append the new data to the instance variable you declared


    //[_responseData appendData:data];

    NSString *responseBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@",responseBody);

    if(data != NULL)
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
                                                 (unsigned long)NULL), ^(void) {

        NSError *error = nil;
        //NSMutableArray *jsonArray = [[CJSONDeserializer deserializer] deserializeAsArray:[responseBody dataUsingEncoding:NSUTF8StringEncoding] error:&error];
            NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
        if (error)
        {
            NSLog(@"JSONObjectWithData error: %@", error);
            [delegate onErrorGetArrayFromServer];
        }
        else
        [self parseJSON:jsonArray];

        });

    }
    else
    {
        if([delegate respondsToSelector:@selector(onErrorGetArrayFromServer)])
        {
            [delegate onErrorGetArrayFromServer];
        }
    }
}

The response is like:

    [{"id":"37",
"id_estado":"1",
"id_categoria":"1",
"nombre":"fer",
"email":"asd@gmail.com",
"fecha":"2014-07-16 11:25:00",
"observaciones":"as dasd asdasd sasd",
"latitud":"37.619636",
"longitud":"-4.318449",
"foto":"images\/default.jpg"},

{"id":"36",
"id_estado":"1",
"id_categoria":"6",
"nombre":"Fernando",
"email":"",
"fecha":"2014-07-16 10:32:45",
"observaciones":"que",
"latitud":"37.6178690439634",
"longitud":"-4.3238141387701",
"foto":"images\/default.jpg"}]

It throws me the error:

JSONObjectWithData error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x9e0f610 {NSDebugDescription=Invalid value around character 0.}

I tried with other library (CJSON) and it throw me the error:

JSONObjectWithData error: Error Domain=kJSONScannerErrorDomain Code=-202 "Could not scan array. Could not scan a value." UserInfo=0xa15c0e0 {snippet=!HERE>![{"id":"37","id_esta, location=0, NSLocalizedDescription=Could not scan array. Could not scan a value., character=0, line=0}

My server is a REST server and for my Android aplication works well.


_SOLVED_

Thanks to @Himanshu Joshi:

Why are you parsing the data in didReceiveData:? Data is not downloaded completely there, you have to append the data there. Parse the data in connectionDidFinishLoading: delegate method –

I parsed the data in connectionDidFinishLoading: and everything go fine.


回答1:


I experienced the same issue, but it was because my initial URL was not correct.

The response needs to be checked before you parse the JSON. It could be telling you that it wasn't found.

At that point the data actually can contain a 404 HTML page.

I use these methods to debug this, and simpler methods to process the web request:

// Asynchronous fetch the JSON and call the block when done
NSURLSessionDataTask *downloadTask =
[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) 
{
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;

    if ([httpResponse statusCode]!=200) 
    {
        // log [response  description]
        // log [NSString stringWithUTF8String:[data bytes]] 
        return;
    }

    NSDictionary* jsonDic =     
        [NSJSONSerialization JSONObjectWithData:data
                             options:NSJSONReadingAllowFragments
                             error:&error];

    if (!jsonDic) 
    {
        return;
    }
    // process the JSON
}];
[downloadTask resume];



回答2:


Your JSON has white space before the data:

    [{"id":"37",

Check your server.



来源:https://stackoverflow.com/questions/24801883/invalid-value-around-character-0-nsjsonserialization

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!