我正在开发iOS App。我在以下代码中从PHP服务器获取JSON数据。
NSURL *requestUrl = [NSURL URLWithString:urlString];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:requestUrl];
NSHTTPURLResponse *httpResponse;
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&httpResponse error:nil];
NSString *str= [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSError *e = nil;
NSArray *array =[NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments|NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&e];
NSLog(@"str=%@",str);
NSLog(@"error=%@",e);
NSLog(@"错误=%@",e)表示"错误域= NSCocoaErrorDomain Code = 3840"操作无法完成。 (可可误差3840。)" (在字符3010周围形成错误的对象。)UserInfo = 0x15ed7f40 {NSDebugDescription =在字符3010周围形成错误的对象。}"。
NSLog(@" str =%@",str)包含" \ 343 \ 201"出乎意料。
我认为问题是JSON数据不正确且超过" \ 343 \ 201"导致这个问题。
你能告诉我如何解决这个问题吗?
答案 0 :(得分:2)
快速搜索错误消息表明问题是由于格式错误的JSON数据造成的。
错误域= NSCocoaErrorDomain代码= 3840"无法完成操作。 (可可误差3840。)" (JSON文本不是以数组或对象和选项开头,以允许未设置片段。)UserInfo = 0x984aeb0 {NSDebugDescription = JSON文本不以数组或对象开头,并且选项允许未设置片段。}
这意味着您应该允许片段,我可以看到它是您已经使用的选项。我建议您尝试在浏览器中执行JSON查询并验证JSON。您可以将其复制到文本编辑器中以确保它有效。共享该字符串(如果它不是敏感信息)将允许我们进一步隔离问题。
SO上的其他一些人报告了类似的问题,例如here。我建议您使用错误消息文本"错误域= NSCocoaErrorDomain Code = 3840"操作无法完成。 (可可误差3840。)"并搜索SO以寻找导致问题的更多线索。
您可能还想尝试不同的方法,将选项设置为nil(用于测试目的),然后再次执行并验证结果。
更新
好的,完整的错误信息是:
NSLog(@"错误=%@",e)表示"错误域= NSCocoaErrorDomain Code = 3840"操作无法完成。 (可可误差3840。)" (在字符3010周围形成错误的对象。)UserInfo = 0x15ed7f40 {NSDebugDescription =在字符3010周围形成错误的对象。}"。
基于此,您的JSON中有一些错误的文本。输出到文本文件并尽可能共享。使用这些关键词搜索SO" JSON在字符周围形成错误的对象"揭示了这是one的四个答案。请查看这些是否可以解决您的问题。
答案 1 :(得分:0)