iOS 后臺(tái)返回json解析出現(xiàn)的null的解決辦法

在后臺(tái)返回值為Null為空時(shí),我們代碼沒(méi)有判斷時(shí)谍咆,程序就會(huì)崩潰禾锤。當(dāng)時(shí)一直很疑惑是為啥,后來(lái)發(fā)現(xiàn)是數(shù)據(jù)問(wèn)題摹察,由于服務(wù)器的數(shù)據(jù)庫(kù)中有些字段為空恩掷,然后以Json形式返回給客戶端時(shí)就會(huì)出現(xiàn)這樣的數(shù)據(jù)。當(dāng)我們通過(guò)一些第三方數(shù)據(jù)解析庫(kù)解析數(shù)據(jù)后供嚎,就會(huì)是下圖這種數(shù)據(jù)格式黄娘。null既不是字符串也不是nil所以我們有些判斷是沒(méi)用的。

null

解析成對(duì)象之后查坪,如果直接向這個(gè)對(duì)象發(fā)送消息(length,count 等等)就會(huì)直接崩潰。提示錯(cuò)誤為

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

解決辦法

1.對(duì)取值對(duì)象類型判斷宁炫。缺點(diǎn)是太過(guò)繁瑣偿曙,每次都要寫(xiě)。

#define kDictIsEmpty(dic) ([dic isKindOfClass:[NSNull class]])//宏
if (![@"你要取的值" isKindOfClass:[NSNull class]]){
//數(shù)據(jù)
}

2.字符串匹配羔巢。在獲取到服務(wù)器返回的Json時(shí)(返回結(jié)果是string對(duì)象)通過(guò)stringByReplacingOccurrencesOfString方法望忆,替換"null"為"空字符",然后解析竿秆。不過(guò)通過(guò)這個(gè)方法也有可能導(dǎo)致數(shù)據(jù)無(wú)法解析

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

3.解析時(shí)把null 類型替換成nil启摄。

//有返回值的宏
#define isToNull(value) \
({\
   id tmp;\
    if (![value isKindOfClass:[NSNull class]])\
        tmp = value;\
    else
        tmp = nil;\ 
    (tmp);\
})\

//調(diào)用方法
label.text = isToNull(dic[@"data"]);

4.如果使用是AFNetwork做網(wǎng)絡(luò)請(qǐng)求的話,可以用以下代碼幽钢,會(huì)自動(dòng)去除空值

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFJSONResponseSerializer *response = [AFJSONResponseSerializer serializer];
response.removesKeysWithNullValues = YES;//去除空值
manager.responseSerializer = response;//申明返回的結(jié)果是json類

去除前

去除前

去除后 所有為空的鍵值對(duì)都會(huì)被自動(dòng)去除

去除后

5.最有效而且簡(jiǎn)單的方法歉备。使用國(guó)外一位大牛寫(xiě)的Category,叫做NullSafe 匪燕,在運(yùn)行時(shí)操作蕾羊,把空值置為nil,而nil是安全的帽驯,可以向nil對(duì)象發(fā)送任何message而不會(huì)奔潰龟再。
具體使用方法項(xiàng)目有說(shuō)明

NullSafe鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市尼变,隨后出現(xiàn)的幾起案子利凑,更是在濱河造成了極大的恐慌,老刑警劉巖嫌术,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哀澈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡度气,警方通過(guò)查閱死者的電腦和手機(jī)日丹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蚯嫌,“玉大人哲虾,你說(shuō)我怎么就攤上這事丙躏。” “怎么了束凑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵晒旅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我汪诉,道長(zhǎng)废恋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任扒寄,我火速辦了婚禮鱼鼓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘该编。我一直安慰自己迄本,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布课竣。 她就那樣靜靜地躺著嘉赎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪于樟。 梳的紋絲不亂的頭發(fā)上公条,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音迂曲,去河邊找鬼靶橱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛路捧,可吹牛的內(nèi)容都是我干的抓韩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鬓长,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谒拴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起涉波,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤英上,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后啤覆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體苍日,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年窗声,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了相恃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笨觅,死狀恐怖拦耐,靈堂內(nèi)的尸體忽然破棺而出耕腾,到底是詐尸還是另有隱情,我是刑警寧澤杀糯,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布扫俺,位于F島的核電站,受9級(jí)特大地震影響固翰,放射性物質(zhì)發(fā)生泄漏狼纬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一骂际、第九天 我趴在偏房一處隱蔽的房頂上張望疗琉。 院中可真熱鬧,春花似錦歉铝、人聲如沸盈简。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)送火。三九已至拳话,卻和暖如春先匪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弃衍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工呀非, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镜盯。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓岸裙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親速缆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子降允,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)艺糜,斷路器剧董,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 《ilua》速成開(kāi)發(fā)手冊(cè)3.0 官方用戶交流:iApp開(kāi)發(fā)交流(1) 239547050iApp開(kāi)發(fā)交流(2) 1...
    葉染柒丶閱讀 10,746評(píng)論 0 11
  • 畢業(yè)幾天的我,剛進(jìn)一個(gè)單位破停,沒(méi)有適應(yīng)這里的節(jié)奏翅楼,午睡時(shí)突然想起,如果高中的我知道我現(xiàn)在的生活一定會(huì)特別羨慕真慢。想想這...
    愛(ài)美麗的小靜閱讀 192評(píng)論 0 0
  • 通常皂林,體寒的女孩子會(huì)非常怕冷,手腳冰涼宠蚂。 很多女生仗著自己年輕并不把體寒當(dāng)一回事式撼,殊不知,如果長(zhǎng)期處于嚴(yán)重體寒的話...
    青青優(yōu)農(nóng)閱讀 395評(píng)論 0 0
  • 12年7月入職求厕,已經(jīng)是兩年工作經(jīng)驗(yàn)的員工了著隆。 初來(lái)乍到的時(shí)候還心想,廣闊天地大有作為呀癣,后來(lái)淪陷在改Bug的汪洋大海...
    草頭溪閱讀 167評(píng)論 0 1