2016-11-21 30 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) 
相关问题