JSON解析问题集锦

NSJSONSerialization精度丢失问题

  • 当我们服务器传一个数据3.0(浮点数)Android那边也是3.0,iOS这边却是是2.99999
 // 模拟服务器传递过来的JSON数据
    NSString *jsonStr = @"{\"71.40\":71.40, \"97.40\":97.40, \"80.40\":80.40, \"188.40\":188.40}";
    NSData *JSONData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];

    NSDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:JSONData options:0 error:nil]];

    NSLog(@"%@",dict);

    /**
     "188.40" = "188.4";
     "71.40"  = "71.40000000000001";
     "80.40"  = "80.40000000000001";
     "97.40"  = "97.40000000000001";
     */
  • 解决方案:
    1、协商服务端转化为字符串类型
    2、第三方的JSON(AFNetwork)

服务器传递过来是float类型,但是苹果默认是双精度double类型,就会造成导致精度丢失

AFN JSON解析失败

  • 当服务器返回JOSN数据,Android端解析没问题,iOS端解析出错

  • 解决方案:修改AFN源码

- (instancetype)serializer {
    return [self serializerWithReadingOptions:(NSJSONReadingOptions)0|NSJSONReadingAllowFragments];
}

AFN默认解析方式是 NSJSONReadingMutableContainers,如果json数据是碎片化(解析出来不是以字典开头的),就会解析不出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值