字符0,NSJSONSerialization周围的值无效 [英] Invalid value around character 0, NSJSONSerialization

查看:245
本文介绍了字符0,NSJSONSerialization周围的值无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从我的服务器上获取了一个有效的回复:

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.}

我尝试过使用其他库( CJSON )它告诉我错误:

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}

我的服务器是一个REST服务器和我的Android应用程序运行良好。

_SOLVED _

_SOLVED_

感谢@Himanshu Joshi:

Thanks to @Himanshu Joshi:

为什么要解析didReceiveData中的数据:?数据未完全下载,您必须在那里附加数据。解析connectionDidFinishLoading中的数据:委托方法 -

我解析了 connectionDidFinishLoading:中的数据很好。

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

推荐答案

我遇到了同样的问题,但那是因为我的初始网址不正确。

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

在解析JSON之前需要检查响应。它可能会告诉你它没有找到。

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

此时数据实际上可以包含404 HTML页面。

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

我使用这些方法来调试这个,以及更简单的方法来处理Web请求:

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];

这篇关于字符0,NSJSONSerialization周围的值无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆