你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS7技巧 >> Json數據傳輸中null的問題以及宏的返回值

Json數據傳輸中null的問題以及宏的返回值

編輯:IOS7技巧
這段時間公司房樂網在開發手機app,我負責寫app的數據接口,用php輸出Json數據。Json就是一種常用的高效簡潔的數據格式。現在糾結一個問題,如果數據庫中有些字段為空,然後以Json形式返回給客戶央就會出錯。

問題現象

但是幾個項目下來一直遇到一個坑爹的問題,程序在獲取某些數據之後莫名崩潰。其實很早就發現了原因:由於服務器的數據庫中有些字段為空,然後以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:@":"""];



這個方法本

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