试图在快速解析JSON但不工作

时间:2018-02-16 13:18:38

标签: php ios json swift nsjsonserialization

我正在尝试解析一些JSON,这是我直接转到URL时返回的内容:

[{"Password":"whatever1"}]

我的代码能够正确接收数据(当我调试变量“data”具有上述JSON时)但是当尝试解析它时,它将无法工作。我认为它可能与方括号有关,因为我一直在解析其他没有方括号的JSON而且效果很好。

这是我的代码:

func SignIn (username: String, password: String, completion: @escaping (Bool)->())
{
    let url = URL(string: "http://<myIP>/API/SignIn.php?username=\(username)");

    let task = URLSession.shared.dataTask(with: url!)
    { (data, response, error) in
        if let data = data
        {
            do
            {
                // Convert the data to JSON
                let jsonSerialized = try JSONSerialization.jsonObject(with: data, options: []) as? [String : Any]

              //  print( jsonSerialized)
                if let json = jsonSerialized, let result = json["Password"]
                {
                    print(result)
                    if (String(describing: result) == password)
                    {
                        completion(true)
                    }
                    else
                    {
                        completion(false)
                    }
                    // TODO: password is wrong,
                    // TODO: username is wrong
                    // TODO: else if timeout
                }
            }
            catch let error as NSError {
                print(error.localizedDescription)
                completion(false)
            }
        }
        else if let error = error
        {
            print(error.localizedDescription)
            completion(false)
        }
    }
    task.resume()

}

1 个答案:

答案 0 :(得分:2)

将代码重写为:

let jsonSerialized = try JSONSerialization.jsonObject(with: data, options: []) as? [[String : Any]]

这是必需的,因为您的JSON响应是一组字典,就像其他人提到的那样。

使用以下方式访问结果:

let result = json.first["Password"]