HTTP Post请求带有JSON对象列表的Swift 5

问题描述 投票:0回答:1

[您好,我正在使用Swift 5发出HTTP POST请求,该请求返回一个JSON对象列表,我认为这是导致我的错误的原因,我似乎找不到解决方案,因为我搜寻了几乎所有可以即使这似乎是一个基本概念,也可以在stackoverflow和youtube以及Apple文档中找到。这是我的回应:

[
        {
        "_id": "---------------",
        "phone_number": "xxx-xxx-xxx"
        "first_name": "Name",
        "last_name": "LastName",
        "gender": "Female",
        "verified": true
    },
    {
        "_id": "---------------",
        "phone_number": "xxx-xxx-xxx"
        "first_name": "Name",
        "last_name": "LastName",
        "gender": "Female",
        "verified": true
    }
]

我用于发出HTTP请求的代码是:

        let url = URL(string: "URLString")!
        let json: [String:Any] = ["phone_number":phoneNumber]
        let session = URLSession.shared
        var request = URLRequest(url: url)
        request.httpMethod = "POST"

        do{
            request.httpBody = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
        }catch let error {
            print(error.localizedDescription)
        }

        //HTTP Headers
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")

        //URL data task
        let task = session.dataTask(with: request) { (data, response, error) in
            guard error == nil else{
                print("Error!")
                return
            }
            guard let data = data else{
                print("Error fetching data")
                return
            }

            do {
                guard let responseJSON = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any] else {
                    print("Unable to serialize response!") //FAILS HERE EVERY TIME
                    return
                }
                print(responseJSON)
                print("WOO made it!")
            }catch let error {
                print("Error with response!")
            }
        }
        task.resume()

我不确定问题到底是什么,但我已指出问题出在哪里,并且我尝试在转换数据之前先打印出数据,以确保它不为空,并且显示为2000字节,所以我知道不是空的。我的猜测是存在一个问题,因为它采用对象列表的形式,而不是大多数示例中所示的一个对象。有时,我的Express服务器端HTTP主体为零时,我也遇到了一些问题,因此不确定我是否做错了那部分。但是从现在起,我只希望能够解析我的响应,因此我可以开始调试其余部分。感谢您的帮助。

您好,我正在使用Swift 5发出HTTP POST请求,该请求返回一个JSON对象列表,我认为这是导致我的错误的原因,我似乎找不到解决方案,因为我几乎已经搜寻过...] >

json swift express serialization httprequest
1个回答
1
投票

您需要[[String:Any]]而不是[String:Any]

guard let responseJSON = try JSONSerialization.jsonObject(with: data) as? [[String:Any]] else {
    print("Unable to serialize response!") //FAILS HERE EVERY TIME
    return
 }
© www.soinside.com 2019 - 2024. All rights reserved.