2016-11-21 27 views
0

這是我從服務器獲取的JSON數據。如何從服務器解析數據?應用程序從字典中讀取數據時崩潰

{ 
    "result": "SUCCESS", 
    "resultcode": "000", 
    "balance": "-32020", 
    "available": "-32020", 
    "reserved": 0 
} 

當我試圖解析這些JSON數據,應用程序崩潰並引發Could not cast value of type '__NSCFNumber' (0x1a17dab60) to 'NSString' (0x1a17e5798).

我知道這個問題是關於數據的類型。但是當我在上面的JSON數據中獲得reserved鍵的正值時,它顯示的是JSON數據中的字符串值,但當我得到負值reserved鍵時,它返回Numeric數據類型。

這是我正在讀取數據的代碼。

self.response?.objectForKey("reserved") as! NSString 

那麼如何處理這類問題呢?

+0

請更新您存儲這種反應你的方法 –

+1

請更新代碼片段此。 – iDeveloper

回答

3

您可以使用if語句解析數據。以下檢查

if let reservedNum = JSON["reserved"] as? Double { 
    print(reservedNum) 
} else if let reservedString = JSON["reserved"] as? String { 
    print(reservedString) 
} else { 
    print("Error Parsing Data") 
}  

if let safeResult = JSON["result"] as? String { 
    print(safeResult) 
} 

和其餘的一樣,並處理模態中的響應。

1

什麼是這樣的:

var reserved:Double? 
if let reserved_string=response.value(forKey: "reserved") as? NSString{ 
    reserved=reserved_string.integerValue 
} 
if let reserved_float=response.value(forKey: "reserved") as? Double{ 
    reserved=reserved_float 
} 
0

它因爲在你的JSON響應,保留關鍵是NSCFNumber類型,所以你不能直接強制換行到這一點的NSString所以用這樣的方式:

if let mReserved = self.response?.objectForKey("reserved") as? Int { 
    print(mReserved) 
} 
0

你必須檢查什麼樣的數據類型是可選的。

if self.response?.objectForKey("reserved") as? NSString{ 
//Do something with NSString 
}else if self.response?.objectForKey("reserved") as? NSNumber{ 
//Do something with NSNumber 
}else { 
print("Error") 
}  
0

試試下面的代碼

let reservedStr = String(response.value(forKey: "reserved") as! Double) 
相關問題