1

我试图将 json 字符串解析成字典。为此我使用以下代码:

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:json_string];

这给了我以下错误:

+[NSJSONSerialization JSONObjectWithData:]: unrecognized selector sent to class...

我在 Apples 文档中进行了搜索,发现该类包含在 Foundation 框架中(我的项目中包含了该框架)。我不知道为什么会这样。

任何的想法?谢谢并恭祝安康。

4

3 回答 3

10

你忘记了一些论点:

NSError *error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:json_string options:0 error:&error];

请注意,第一个参数是一个NSData对象,而不是字符串。

于 2013-04-17T17:24:36.040 回答
4

完整的选择器是JSONObjectWithData:options:error:,所以看起来您缺少两个参数。尝试类似的事情:

NSError *error = nil;
NSData *jsonData = [rawJSONString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options: kNilOptions error:&error];

请注意,这需要一个NSData参数而不是一个NSString参数,并且不会总是返回一个NSDictionary,它可能是一个NSArray或另一个 Foundation 对象。在生产使用中,您应该error在相信这jsonObject是一个有效对象之前检查参数。

于 2013-04-17T17:27:38.010 回答
4

根据文档,您首先需要将您的字符串转换为 NSData 对象,并调用正确的 NSJSONSerialization 类方法。您可以执行以下操作:

NSData *stringData=[json_string dataUsingEncoding:NSUTF8StringEncoding];
NSError *jsonError=nil;
NSDictionary *dictionary =[NSJSONSerialization  JSONObjectWithData:stringData options:0 &jsonError];

检查 jsonError 以获取有关出错的提示(如果有的话)。如果一切顺利,您的字典中将填充 json_string 信息。

于 2013-04-17T17:27:51.933 回答