当我在开发iOS App时从服务器获取JSON数据时,包含奇怪的字符

时间:2014-08-27 15:06:56

标签: ios json nsdata

我正在开发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"导致这个问题。

你能告诉我如何解决这个问题吗?

2 个答案:

答案 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)

<\ n> \“\ 343 \ 201”只是一个平假名字符。绝对正常,JSON没问题。发布您认为导致问题的整个字符串。