解析NSString数据 - 获取空值

时间:2014-05-21 11:46:41

标签: objective-c nsstring nsdictionary nsdata nsjsonserialization

我正在解析和NSString值,但在控制台中获取null。请帮我解决这个问题。

NSString *responseData = [[NSString alloc] initWithData:_responseData encoding:NSASCIIStringEncoding];
NSLog(@"Data: %@", responseData);
NSData *data = [responseData dataUsingEncoding:NSUTF8StringEncoding];

id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSDictionary *res = [json objectForKey:@"demo"];
NSLog(@"res is %@",res);  

3 个答案:

答案 0 :(得分:1)

我的一个项目遇到了类似的问题。我试图从NSData创建NSString(来自webservice的响应),我得到了一个零。我发现在创建String时使用NSASCIIStringEncoding解决了我的问题。事实证明,即使UTF8具有所有ASCII字符,char *也可能无法正确排列某些字符,默认情况下,init方法执行非合法编码,这意味着在遇到意外字符时会返回nil。 对于您的情况,这可能是您的代码。

NSString *responseData = [[NSString alloc] initWithData:_responseData encoding:NSASCIIStringEncoding];
NSLog(@"Data: %@", responseData);
NSData *data = [responseData dataUsingEncoding:NSASCIIStringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSDictionary *res = [json objectForKey:@"demo"];
NSLog(@"res is %@",res);  

注意:我不确定您为什么要进行所有_responseData->数据转换。如果您只是将_responseData反序列化为json对象,则可以直接在NSJSONSerialization中使用它。如下所示。

id json = [NSJSONSerialization JSONObjectWithData:_responseData options:0 error:nil];

有关详细信息,请查看此link

答案 1 :(得分:0)

因为您使用不同的编码,可能会出现错误?尝试在NSString和NSData中使用NSUTF8StringEncoding。

答案 2 :(得分:0)

来自NSString class reference

-initWithData:encoding:

  

返回值
  通过使用编码将数据中的字节转换为Unicode字符来初始化NSString对象。归来了   对象可能与原始接收者不同。如果是,则返回nil   由于某种原因初始化失败(例如,如果数据没有   代表有效的编码数据)

你从哪里获得_responseData?它绝对是NSData对象吗? 您确定使用的是正确的编码吗?

您可以打印_responseData并更新您的问题,以便我们查看一下吗?