do{
let resultJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())
let arrayJSON = resultJSON as! NSArray
let success:NSInteger = arrayJSON["success"] as! NSInteger
if (success == 1 ) ....
json数据是来自服务器的响应,我试图将其转换为整数但我得到了会话错误。
答案 0 :(得分:1)
您将resultJSON
作为NSArray
投射,但之后您尝试通过下标"成功"将其用作词典。
如果响应是字典,则将结果转换为字典:
let result = resultJSON as! NSDictionary
let success = result["success"] as! NSInteger
如果响应是字典数组,则首先在下标前选择其中一个项目。
let arrayJSON = resultJSON as! NSArray
let success = arrayJSON[0]["success"] as! NSInteger
注意:如果可能,请使用Swift的类型数组,而不是使用Foundation的NSArray和NSDictionary。此外,您应该避免使用!
进行强制转换,最好使用if let ... = ... as? ...
或任何其他机制安全地展开选项。
<强>更新强>
以下是一个例子:
do {
let resultJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())
var success = 0
if let dictJSON = resultJSON as? [String:AnyObject] {
if let successInteger = dictJSON["success"] as? Int {
success = successInteger
} else {
print("no 'success' key in the dictionary, or 'success' was not compatible with Int")
}
} else {
print("unknown JSON problem")
}
if success == 1 {
// yay!
} else {
// nope
}
在这个例子中,我使用Swift字典[String:AnyObject]
而不是NSDictionary,我使用Swift整数Int
代替Foundation {{1} }}。我还使用NSInteger
进行类型转换,而不是强制转换。
答案 1 :(得分:1)
这是一个有效的例子(在我的机器上测试)
let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
if let error = error {
print(error)
}
if let data = data{
print("data =\(data)")
do{
let resultJSON = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())
let resultDictionary = resultJSON as? NSDictionary
let success = resultDictionary!["success"]!
let successInteger = success as! Int
print("success = \(success)")
if successInteger == 1 {
print("yes")
}else{
print("no")
}
}catch _{
print("Received not-well-formatted JSON")
}
}
if let response = response {
print("url = \(response.URL!)")
print("response = \(response)")
let httpResponse = response as! NSHTTPURLResponse
print("response code = \(httpResponse.statusCode)")
}
})
task.resume()
响应是:
{ "error_message" : "No User", "success" : 0}
你说你的服务器响应为:
{ "error_message" = "No User"; success = 0; }
这是不一个有效的json,你应该更正它以匹配我给你的json