解析NSString数据-获取空值
Posted
技术标签:
【中文标题】解析NSString数据-获取空值【英文标题】:parsing NSString data-getting null value 【发布时间】:2014-05-21 11:46:40 【问题描述】:我正在解析 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);
【问题讨论】:
你能显示日志吗?编码是否正确? 您的问题在哪里?将_responseData
转换为字符串或将数据反序列化为 JSON 对象?
这是你的问题:error:nil
。如果你忽略错误,你怎么期望调试任何东西?
而且你根本不应该对 JSON 使用 ASCII 编码(总是 UTF),也不应该从 NSData 转换为 NSString 再转换回 NSData - 只需将输入 NSData 传递给 NSJSONSerialization。跨度>
【参考方案1】:
我在我的一个项目中遇到了类似的问题。我试图从 NSData(来自 webservice 的响应)创建 NSString,但我得到了一个零。我发现在创建字符串时使用 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。
【讨论】:
不工作老兄,谢谢你的努力,我认为后端有问题。【参考方案2】:可能因为您使用不同的编码而出现错误?尝试在 NSString 和 NSData 中使用 NSUTF8StringEncoding。
【讨论】:
【参考方案3】:来自 NSString class reference:
-initWithData:encoding:
返回值 通过使用编码将数据中的字节转换为 Unicode 字符来初始化的 NSString 对象。返回的 对象可能与原始接收者不同。如果 由于某种原因初始化失败(例如,如果数据没有 表示用于编码的有效数据)。
你从哪里得到_responseData
?绝对是NSData
object 吗?
您确定您使用的是正确的编码吗?
您能否打印出_responseData
并更新您的问题以便我们查看?
【讨论】:
正在获取 _responseData - (void)connectionDidFinishLoading:(NSURLConnection *)connection。 您对自己的问题不够清楚。您是否正确附加了connection:didReceiveData:
上的数据?
我正在从后端获取值并存储在 NSString 中,这里的数据显示在控制台区域,但在解析该 nsstring 时获取 null 值
是的 [_responseData appendData:data];
对不起,数据是机密的。以上是关于解析NSString数据-获取空值的主要内容,如果未能解决你的问题,请参考以下文章
将 Plist (NSString) 解析为 NSDictionary
如何使用来自 NSString 的 NSJSONSerialization 解析 Json [重复]