天天看點

JSON解析問題集錦NSJSONSerialization精度丢失問題AFN JSON解析失敗

NSJSONSerialization精度丢失問題

  • 當我們伺服器傳一個資料3.0(浮點數)Android那邊也是3.0,iOS這邊卻是是2.99999
// 模拟伺服器傳遞過來的JSON資料
    NSString *jsonStr = @"{\"\":71.40, \"\":97.40, \"\":80.40, \"\":188.40}";
    NSData *JSONData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];

    NSDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:JSONData options: 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資料是碎片化(解析出來不是以字典開頭的),就會解析不出來