您的位置:首页 > 移动开发 > IOS开发

ios的NSJSONSerialization解析json数字时的错误

2018-02-05 13:18 495 查看
写了近两年的android 自认为技术成长还不错 最近却被老大说看着没什么进步 没什么进步。。。好吧 所以要求来写ios了 把安卓端上的图片处理移植到苹果上 其实不大想写 可是这小公司实在没什么的了 废话了

OC的NSJSONSerialization在解析json时,遇到数字,貌似有个转换错误和精度问题

现象

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
BOOL isLoad = [userDefaults boolForKey:name];


在执行上面这段代码时总是偶尔崩溃,几率还很高,多番debug调试,发现是name字段有问题,有时是NSString,有时是NSNumber。当是NSNumber时就崩溃了

分析

//json局部数据这样的:{"content_id" : "666"}
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray *dicData = dic[@"data"];
for (NSMutableDictionary *dic in dicData) {
NSString name = dic[@"content_id"];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; BOOL isLoad = [userDefaults boolForKey:name];
}


json数据是通过NSJSONSerialization JSONObjectWithData解析成的字典,结果在dic[@”content_id”]解析出name时出错,但是在这句代码执行上却不奔溃报错,这与java的android貌似不一样啊,感觉oc好多时候都看着有问题,但运行ios应用的时候不一定奔溃。。。不过在执行BOOL isLoad = [userDefaults boolForKey:name]时boolForKey不接受NSNumber类型崩溃了。这时要把代码改成下面这样

解决

没有崩溃了

//json局部数据这样的:{"content_id" : "666"}
//NSString name = dic[@"content_id"];会产生类型错误
//虽然是"666"这样的数字字符串,但还是要当成id类型stringWithFormat一下
NSString name = [NSString stringWithFormat:@"%@",dic[@"content_id"]];


再一个数据精度问题

当json数据带有这样的:{“price” : “666.66”},浮点小数数据时,解析会出现问题,要明确转换为doubleValue类型

NSString *value=[NSString stringWithFormat:@"%f",[dic[@"price"] doubleValue]];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: