NSDictionary 和 JSON 值

Posted

技术标签:

【中文标题】NSDictionary 和 JSON 值【英文标题】:NSDictionary and JSON value 【发布时间】:2014-03-27 15:02:32 【问题描述】:

我的 JSON 中有这个:

"idAlunoGraduacao":001,"semestre":2,"ano":2010,"frequencia":100,"notaFinal":6,"conceito":"Aprovado","idTurma":"Biofisica", 
"idAlunoGraduacao":002,"semestre":2,"ano":2010,"frequencia":88,"notaFinal":9.2,"conceito":"Aprovado","idTurma":"Diversidade sexual"

在我的 .h 文件中,我有这个循环:

for (NSDictionary *dados in results)
    NSLog(@"%@",[dados objectForKey:@"notaFinal"]);

第一个“notaFinal”是 6 并且打印正常,但是当打印第二个时结果是:9.199999999999999

为什么?

【问题讨论】:

这不是 JSON。 JSON 不会有两个 括起来的字符串,中间有一个逗号,它们之外没有任何内容。 至于你明显的问题,搜索“浮点不准确”。 您可以考虑在显示/输出上格式化浮点数以避免这种情况;例如NSLog(@"Value: %.2f", [dados objectForKey:@"notaFinal"]); 使用 NSObject 模型类来解析这个字典 【参考方案1】:

您的 JSON 不是 JSON,下一个代码是 JSON

[ “idAlunoGraduacao”:1, “学期”:2, “无”:2010 年, “频率”:100, "notaFinal": 6, “conceito”:“Aprovado”, “idTurma”:“Biofisica” , “idAlunoGraduacao”:2, “学期”:2, “无”:2010 年, “频率”:88, “notaFinal”:9.2, “conceito”:“Aprovado”, “idTurma”:“多元化性” ]

此外,您的 JSON 与 Literal NSDictionary 非常相似。

@@"idAlunoGraduacao":@001,@"semestre":@2,@"ano":@2010,@"frequencia":@100,@"notaFinal":@6,@"conceito":@"Aprovado",@"idTurma":@"Biofisica";

然后,你说:“在我的 .h 文件中我有这个循环:”,我很确定你的 .m 中有这个循环

在 Objective-C 中是使用curly brackets in for 循环和 if-else 的最佳实践:

for (NSDictionary *dados in results)

    NSLog(@"%@",[dados objectForKey:@"notaFinal"]);

最后,正如@Koray_Alkan 所说,您可以使用

NSLog(@"Value: %.2f", [[dados objectForKey:@"notaFinal"] floatValue]);

【讨论】:

以上是关于NSDictionary 和 JSON 值的主要内容,如果未能解决你的问题,请参考以下文章

如何修复错误无法将 [NSDictionary] 快速转换为 NSDictionary?

如何返回数据类型:Swift 中的 NSDictionary

NSDictionary setValue:forKey: -- 得到“这个类不是键值编码兼容的键”

NSDictionary 和 JSON 值

使用 objectForKey 返回错误类型的键

是否有 AFHTTPClient 使用 AFNetworking 发布 json 的示例?