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數據是碎片化(解析出來不是以字典開頭的),就會解析不出來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章