JSON數據中有null導致數據加載失敗的解決辦法

問題分析:

使用NSJSONSerialization或者AFN框架的AFHTTPSessionManager(底層也是NSJSONSerialization)將NSData數據轉化成OC對象,有時會出現URL正確,加載數據任然會報錯:

 reason: '-[NSNull length]: unrecognized selector sent to instance

分析原因發現,轉化出來的OC對象中含有null.所以,NSNull沒有length方法,所以會報找不到方法錯誤。


解決辦法:將"null"替換成“ ”。

  • 1.先將NSData數據轉化成NSString;
  • 2.再對轉化好的NSString進行替換;
  • 3.替換好的NSSting再轉化成NSData;
  • 4.NSData轉化成OC對象

下面提供一個封裝好的方法,以后直接使用就好了

//替換數據中的空字符串
+ (NSArray*)arrayWithNoNullArray:(NSArray*)originalArray {
    //array -> string
    NSData *data = [NSJSONSerialization dataWithJSONObject:originalArray options:0 error:nil];
    NSString *str =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    //替換
    NSString *nStr = [str stringByReplacingOccurrencesOfString:@"null" withString:@"\"\""];
    //string -> array
    NSData *nData =[nStr dataUsingEncoding:NSUTF8StringEncoding];
    return  [NSJSONSerialization JSONObjectWithData:nData options:0 error:nil];
}

傳入一個含有null的OC數組,直接返回替換過的新數組。用不含null的數組再去加載數據,就不會有問題了。


Snip20160726_7.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666閱讀 1,420評論 0 6
  • iOS開發系列--網絡開發 概覽 大部分應用程序都或多或少會牽扯到網絡開發,例如說新浪微博、微信等,這些應用本身可...
    lichengjin閱讀 3,707評論 2 7
  • 下面是我最近兩年學習OC中的一些基礎知識,對于學習OC基礎知識的人可能有些幫助,拿出來分享一下,還是那句話不喜勿噴...
    小小趙紙農閱讀 2,631評論 1 7
  • NSURLSession基本使用 簡介 使用步驟使用NSURLSession會話對象創建Task,然后執行Task...
    彼岸的黑色曼陀羅閱讀 1,018評論 0 3
  • OC中的類分為可變和不可變。下表列出了Foundation框架中主要的可變類和不可變類: 種類 不可變類 可變類 ...
    陳_振閱讀 552評論 0 0