你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS中json解析湧現的null,nil,NSNumber的處理方法

iOS中json解析湧現的null,nil,NSNumber的處理方法

編輯:IOS開發綜合

在IOS開辟進程中常常須要與辦事器停止數據通信,Json就是一種經常使用的高效簡練的數據格局。

JSON建構有兩種構造:

json簡略說就是JavaScript中的對象和數組,所以這兩種構造就是對象和數組2種構造,經由過程這兩種構造可以表現各類龐雜的構造
1、對象:對象在js中表現為“{}”擴起來的內容,數據構造為 {key:value,key:value,...}的鍵值對的構造,在面向對象的說話中,key為對象的屬性,value為對應的屬性值,所以很輕易懂得,取值辦法為對象.key 獲得屬性值,這個屬性值的類型可所以 數字、字符串、數組、對象幾種。

2、數組:數組在js中是中括號“[]”擴起來的內容,數據構造為 ["java","JavaScript","vb",...],取值方法和一切說話中一樣,應用索引獲得,字段值的類型可所以數字、字符串、數組、對象幾種。

經由對象、數組2種構造便可以組分解龐雜的數據構造了。

成績景象

然則幾個項面前目今來一向碰到一個坑爹的成績,法式在獲得某些數據以後莫名瓦解。其實很早就發明了緣由:因為辦事器的數據庫中有些字段為空,然後以Json情勢前往給客戶端時就會湧現如許的數據:

"somevalue":null

經由過程JsonKit 這個第三方庫解析出來的數據就成了

somevalue = "<null>";

這個數據類型不是nil 也不是 String。 解析成對象以後,假如直接向這個對象發送新聞(eg:length,count 等等)就會直接瓦解。提醒毛病為:

-[NSNull length]: unrecognized selector sent to instance 0x388a4a70

處理辦法

其實一向沒有找到完善的處理方法,坑了我良久。

1、最開端的處理辦法就是為了敷衍以後碰到的瓦解,看看哪一個字段能夠為空,那末就對該字段應用進步行斷定,經由過程瓦解時的毛病提醒可以看出,如許的字段解析成的對象是 NSNull 類型的,所以可以直接斷定是否是此類型:

if (![isKindOfClass:[NSNull class]]){xxxxxxx;}

由於字段其實太多,就找一個補一個。

2、後來想完全處理這成績,就盤算從數據源下手,其實應當可以用正則表達式婚配這個null ,然落後行調換,若何怎樣正則是我的硬傷啊。因而就相出了一個盜窟辦法:字符串婚配。在獲得到辦事器前往的Json時,前往成果時string對象,因而就先調換 null 為 為空字符””,然後再解析。

json = [jsonStr stringByReplacingOccurrencesOfString:@":null" withString:@":\"\""];

這個辦法原來很見效,然則我這裡的辦事器前往極不簡練,各類渣滓數據(不吐槽這了)。。。橫豎如許會招致json沒法解析了。

3、最初沒有方法,只能在解析的時刻下手,把是NSNull 類型的值調換成nil。 普通就寫個tool辦法,然後解析時挪用。然則嫌太費事,就想弄寫個宏,經由過程搜刮驚異的發明宏也是可以有前往值的,成果以下:

#define VerifyValue(value)\
({id tmp;\
if ([value isKindOfClass:[NSNull class]])\
tmp = nil;\
else\
tmp = value;\
tmp;\
})\

宏裡的最初一句語句就是前往值。然後在解析數據時挪用宏:

contact.contactPhone = VerifyValue(contactDic[@"send_ContactPhone"]);

4、假如你應用A.network 這個庫做收集要求的話,可以用以下代碼,主動幫你去失落這個憎惡的空值

self.removesKeysWithNullValues = YES;

5、最終計劃

終究找到了與日俱增的計劃,牛逼的老外寫了一個Category,叫做NullSafe ,在運轉時操作,把這個憎惡的空值置為nil,而nil是平安的,可以向nil對象發送任何message而不會奔潰。這個category應用起來異常便利,只需參加到了工程中便可以了,你其他的甚麼都不消做,對,就是這麼簡略。具體的請去Github上檢查;

【iOS中json解析湧現的null,nil,NSNumber的處理方法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved