代码之家  ›  专栏  ›  技术社区  ›  Axel López

JSONSerialization的响应。swift 3中方法POST的jsonObject为零

  •  1
  • Axel López  · 技术社区  · 7 年前

    这是一个例子,我想做的事情,但线 if let json = try JSONSerialization.jsonObject(with: data) as? [String: String] false 因为 JSONSerialization.jsonObject nil

    func parser(lbl: UILabel){
        let postString = "xxx=xxx&xxxx=xxxx==&xxxxx=xxxxx&xxxxxx=xxxxxx&xx=xx"
    
        let url = URL(string: "http://xxxxxxxxxx.com/xxxxxx/xxxxx/xxxxxx.php")!
        var request = URLRequest(url: url)
    
        request.httpMethod = "POST"
        request.httpBody = postString.data(using: .utf8)
    
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data else {
                lbl.text = "error";
    
                return
            }
    
            do {
                if let json = try JSONSerialization.jsonObject(with: data) as? [String: String] {
                    DispatchQueue.main.async {
    
                        let error = Int(json["success"]!)
    
                        let message = json["message"]
                        lbl.text = message
                    }
                } 
            } catch let parseError {
                print("error to parse: \(parseError)")
    
                let responseString = String(data: data, encoding: .utf8)
                print("response`enter code here` : \(responseString!)")
            }
        }
        task.resume()
    }
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   Umar Farooque    7 年前

    试试这个:

    var resultFromServer: Any?
    resultFromServer = try JSONSerialization.jsonObject(with: data!, options: [])
    

    这应该会将resultFromServer作为类型 Any?

    喜欢

    if let respdict = resultFromServer as? [String : Any] {
    //respone in dictionary format
    }
    
    else if let respArr = resultFromServer as? [Any]{
    //response is array type
    }
    
    else if let stringRespt = String(data: data, encoding: .utf8){
    //resp is string                                
    }