iOS 5 JSON解析导致Cocoa错误3840

iOS 5 JSON解析导致Cocoa错误3840,ios,xcode,json,ios5.1,Ios,Xcode,Json,Ios5.1,在iOS5上,我很难解析下面的JSON字符串 {"States": [{"Name": "Arizona","Cities": [{"Name": "Phoenix"}]},{"Name": "California","Cities": [{"Name": "Orange County"},{"Name": "Riverside"},{"Name": "San Diego"},{"Name": "San Francisco"}]},{"Name": "Nevada","Cities": [{"N

在iOS5上,我很难解析下面的JSON字符串

{"States": [{"Name": "Arizona","Cities": [{"Name": "Phoenix"}]},{"Name": "California","Cities": [{"Name": "Orange County"},{"Name": "Riverside"},{"Name": "San Diego"},{"Name": "San Francisco"}]},{"Name": "Nevada","Cities": [{"Name": "Las Vegas"}]}]}
这是我的代码:

- (void) parseJson {
NSError *jsonError = nil;
NSData *jsonData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Locations-JSON" ofType:@"rtf"]];

if (jsonData) {
    NSDictionary *jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&jsonError];

    if (jsonError) {
        NSLog(@"JSON Error: %@", [jsonError localizedDescription]);

        return;
    }

    NSLog(@"%@", jsonObjects);
}
}
我不断地发现这个错误:

JSON错误:操作无法完成。(可可错误3840。)


我非常感谢您的帮助,因为我显然无法解决这个问题。

有一件事让我觉得不正确,那就是:

[[NSBundle mainBundle] pathForResource:@"Locations-JSON" ofType:@"rtf"]
您的数据是一个RTF文件??它应该是
txt
文件(或任何其他类型的纯文本文件)。RTF文件通常包含文本格式数据,如下所示:

{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf470
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural

\f0\fs24 \cf0 \{"States": [\{"Name": "Arizona","Cities": [\{"Name": "Phoenix"\}]\},\{"Name": "California","Cities": [\{"Name": "Orange County"\},\{"Name": "Riverside"\},\{"Name": "San Diego"\},\{"Name": "San Francisco"\}]\},\{"Name": "Nevada","Cities": [\{"Name": "Las Vegas"\}]\}]\}}
当我将其作为数据读入并尝试将其作为JSON解析时,我得到了您看到的3840错误。该错误的描述是:

无法读取数据,因为它已损坏。(字符2周围的对象中的值没有字符串键。)


所以在我看来,你实际上没有JSON。您有RTF数据。

如果您是因为JSON而不是因为RTF来到这里的,请查看以下答案:
我遇到了类似的问题。当我从服务器下载JSON数据时,我的JSON解析器会间歇性地工作。您是否从该函数获取JSON数据

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
此函数返回的NSData可能是部分数据。您需要将数据追加到类型为NSMutableData的实例变量。然后在另一个函数中处理JSON,如下所示:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
详细信息请阅读本文。它对我有用


我能够通过将
NSData
对象转换为
NSString
来解决JSON 3840错误:

NSError *error;

NSObject *object = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

if (object == nil) {
    NSString *serverResponse = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];

    NSLog(@"\n\nError:\n%@\n\nServer Response:\n%@\n\nCrash:", error.description, serverResponse);
    [NSException raise:@"Invalid Data" format:@"Unable to process web server response."];
}

它成功地设置了jsonData吗?是的,你是对的,就是这样。伙计,我现在觉得自己很傻。。。不过谢谢你的帮助。我只是因为JSON无效(拖尾;在JSON对象定义的末尾)而得到了这个错误。一般的建议可能是使用许多JSON验证程序网页中的任何一个来验证JSON。这对我很有帮助。你知道这个回答是什么意思吗@kraftydevil?服务器遇到内部错误,无法完成您的请求。服务器过载或数据库中存在错误application@hsavit1我的知识就停留在本土。您的错误肯定是服务器/web服务的一个问题,但我无法理解。