2017-06-01 75 views
0

我沒有得到什麼是錯在這裏,我檢索通過Alamofire一個JSON:無法訪問JSON字典搜索結果

let JSON = response.result.value as! [String : Any] 
print("JSON: \(JSON)") 
let statusCode = response.response?.statusCode ?? 999 

這是在控制檯打印:

JSON: ["message": <null>, "value": <__NSArray0 0x174011b30>(

) 
, "error": 0] 

因此JSON設置正確。 我已經再上的StatusCode分配設置斷點打印後立即(同一個範圍的話),但是當我在控制檯PO JSON類型,我得到以下錯誤:

(LLDB)PO JSON 錯誤: 3:1:錯誤:使用未解決的標識符「JSON」

,因而所有的行之後是失敗的:

let resultCode = JSON["error"] as! Int 
let resultMessage = JSON["message"] as! String 
let resultValue = JSON["value"] as! [AnyObject] 

有人能搞清楚爲什麼發生這種情況?這是斯威夫特3.1和Xcode 8.3.2

的JSON是:

{ 
    "error": false, 
    "message": null, 
    "value": [ 
    { 
     "id": 0, 
     "deviceId": "E5E3ED6B-8645-4894-8939-DC6AC7B4C37E" 
    } 
    ] 
} 
+0

添加您的JSON格式也。 – KKRocks

+0

第一次打印:'print(response.result.value ??「No Value is from JSON」)'first,if you get values from json then please put your JSON value here。 –

+0

控制檯日誌告訴你''消息「:',所以你的代碼在'let resultMessage = JSON [」message「]上崩潰! String'由於該值爲空而不是String。 – Pahnev

回答

0

兩個一般性問題:

  • 值的關鍵errorBool而非Int
  • 密鑰message的值爲NSNull,如果error爲真,那麼很可能是String

我建議檢查爲error值:

if let JSON = response.result.value as? [String : Any] { 
    if let error = JSON["error"] as? Bool, error == true { 
     print(JSON["message"]) 
    } else { 
     if let resultArray = JSON["value"] as? [[String:Any]] { 
      for result in resultArray { 
       print("deviceId: ", result["deviceId"] as? String ?? "n/a") 
      } 
     } 
    } 
} 
+0

謝謝你,你是對的! –