如何从服务器解析数据?应用程序从字典中读取数据时崩溃
问题描述:
这是我从服务器获取的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
那么如何处理这类问题呢?
答
您可以使用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)
}
和其余的一样,并处理模态中的响应。
答
什么是这样的:
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
}
答
它因为在你的JSON响应,保留关键是NSCFNumber类型,所以你不能直接强制换行到这一点的NSString所以用这样的方式:
if let mReserved = self.response?.objectForKey("reserved") as? Int {
print(mReserved)
}
答
你必须检查什么样的数据类型是可选的。
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")
}
答
试试下面的代码
let reservedStr = String(response.value(forKey: "reserved") as! Double)
请更新您存储这种反应你的方法 –
请更新代码片段此。 – iDeveloper