解析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?绝对是NSDataobject 吗? 您确定您使用的是正确的编码吗?

您能否打印出_responseData 并更新您的问题以便我们查看?

【讨论】:

正在获取 _responseData - (void)connectionDidFinishLoading:(NSURLConnection *)connection。 您对自己的问题不够清楚。您是否正确附加了 connection:didReceiveData: 上的数据? 我正在从后端获取值并存储在 NSString 中,这里的数据显示在控制台区域,但在解析该 nsstring 时获取 null 值 是的 [_responseData appendData:data]; 对不起,数据是机密的。

以上是关于解析NSString数据-获取空值的主要内容,如果未能解决你的问题,请参考以下文章

Objective C 如何解析这个 NSString

如何解析比 NSString 更长的 JSON 文件?

将 Plist (NSString) 解析为 NSDictionary

如何使用来自 NSString 的 NSJSONSerialization 解析 Json [重复]

如何解析数据,如果它是Objective c中的`isKindOfClass([NSString] class)`

从 NSDictionary 解析 NSString 值返回 nil