无法将jsonArray元素转换为整数

时间:2015-10-05 16:34:17

标签: ios swift swift2

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数据是来自服务器的响应,我试图将其转换为整数但我得到了会话错误。

2 个答案:

答案 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