这是我从服务器获取的JSON数据。
{
"result": "SUCCESS",
"resultcode": "000",
"balance": "-32020",
"available": "-32020",
"reserved": 0
}
当我尝试解析这些JSON数据时,App崩溃并抛出Could not cast value of type '__NSCFNumber' (0x1a17dab60) to 'NSString' (0x1a17e5798).
我知道问题与数据类型有关。但是当我在上面的JSON数据中获得reserved
键的正值时,它会在JSON数据中显示字符串值,但是当我得到reserved
键的负值时,它会返回Numeric
数据类型。
以下是我正在阅读数据的代码。
self.response?.objectForKey("reserved") as! NSString
那么如何处理这类问题?
答案 0 :(得分:3)
您可以使用if let语句解析数据。请查看以下
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 :(得分: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
}
答案 2 :(得分:0)
因为在你的json响应中,保留键是NSCFNumber类型所以你不能直接强制将它包装成NSString所以使用这种方式:
if let mReserved = self.response?.objectForKey("reserved") as? Int {
print(mReserved)
}
答案 3 :(得分:0)
您必须使用Optional检查哪种数据类型。
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")
}
答案 4 :(得分:0)
请尝试以下代码
let reservedStr = String(response.value(forKey: "reserved") as! Double)