iOS 三種處理JSON中null問題方法

背景:
服務(wù)返回的數(shù)據(jù)有可能會(huì)出現(xiàn),key:null 這種情形. 對(duì)于這種情況,提供三種思路處理. 同時(shí)歡迎提供其它更合適的方式處理

  • 1.如果使用AFN框架可以 removesKeysWithNullValues
  • 2.無論離散或者集約型網(wǎng)絡(luò)請(qǐng)求,應(yīng)該存在一個(gè)統(tǒng)一的返回 response 的地方, 可以在此集中處理,簡化的代碼可能如下
// 1. 接受到服務(wù)返回的 response
// 2. 序列化
// 3. 清除json中的null - 避免[NSNull null]導(dǎo)致的crash
json = [JSONUtils JSONObjectWithoutNull:json];

其中 JSONObjectWithoutNull: 的方法實(shí)現(xiàn)可以參考 JSONUtils

  • 3.可以參考 NullSafe ,早在12年就已經(jīng)給出的解決方案>_<.

NuffSafe原理:
簡單點(diǎn)說,當(dāng)我們給一個(gè)NSNull對(duì)象發(fā)送消息的話矾兜,可能會(huì)崩潰(null是有內(nèi)存的),而發(fā)送給nil的話少孝,是不會(huì)崩潰的瓤荔。
作者就是使用了這么一個(gè)原理负拟,把發(fā)送給NSNull的而NSNull又無法處理的消息經(jīng)過如下幾步處理:
1.創(chuàng)建一個(gè)方法緩存,這個(gè)緩存會(huì)緩存項(xiàng)目中類的所有類名。
2.遍歷緩存屈暗,尋找是否已經(jīng)有可以執(zhí)行此方法的類妨蛹。
3.如果有的話屏富,返回這個(gè)NSMethodSignature。
4.如果沒有的話蛙卤,返回nil,接下來會(huì)走forwardInvocation:方法狠半。
5.[invocation invokeWithTarget:nil];將消息轉(zhuǎn)發(fā)給nil。
那么颤难,如何判斷NSNull無法處理這個(gè)消息呢神年,在OC中,系統(tǒng)如果對(duì)某個(gè)實(shí)例發(fā)送消息之后行嗤,它(及其父類)無法處理(比如已日,沒有這個(gè)方法等),系統(tǒng)就會(huì)發(fā)送methodSignatureForSelector消息栅屏,如果這個(gè)方法返回非空飘千,那么就去執(zhí)行返回的方法,如果為nil,則發(fā)送forwardInvocation消息既琴。
這樣就完成整個(gè)轉(zhuǎn)發(fā)鏈了占婉。
以上參考: NullSafe 的原理是什么?

最后, 希望這些對(duì)你有所幫助

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甫恩,隨后出現(xiàn)的幾起案子逆济,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奖慌,死亡現(xiàn)場離奇詭異抛虫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)简僧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門建椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岛马,你說我怎么就攤上這事棉姐。” “怎么了啦逆?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵伞矩,是天一觀的道長。 經(jīng)常有香客問我夏志,道長乃坤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任沟蔑,我火速辦了婚禮湿诊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瘦材。我一直安慰自己厅须,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布宇色。 她就那樣靜靜地躺著九杂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宣蠕。 梳的紋絲不亂的頭發(fā)上例隆,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音抢蚀,去河邊找鬼镀层。 笑死,一個(gè)胖子當(dāng)著我的面吹牛皿曲,可吹牛的內(nèi)容都是我干的唱逢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼屋休,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼坞古!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劫樟,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤痪枫,失蹤者是張志新(化名)和其女友劉穎织堂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奶陈,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡易阳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吃粒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潦俺。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖徐勃,靈堂內(nèi)的尸體忽然破棺而出事示,到底是詐尸還是另有隱情,我是刑警寧澤僻肖,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布很魂,位于F島的核電站,受9級(jí)特大地震影響檐涝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜法挨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一谁榜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凡纳,春花似錦窃植、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暴氏,卻和暖如春延塑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背答渔。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工关带, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沼撕。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓宋雏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親务豺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磨总,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,682評(píng)論 0 9
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用笼沥,...
    LZM輪回閱讀 3,284評(píng)論 0 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蚪燕,服務(wù)發(fā)現(xiàn)娶牌,斷路器,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的...
    西木閱讀 30,544評(píng)論 33 466
  • 忽然對(duì)周遭的事物失去信心 像墜入深淵的孤鳥 例如愛邻薯,例如友誼 我無從感知它們的真實(shí) 像一個(gè)短暫而惶惶的夢(mèng) 你深知它...
    南心北木mua閱讀 487評(píng)論 0 2