如何在swift json请求中传递数组

时间:2017-07-13 18:07:00

标签: php json swift

如何使用swift将数组传递给我的Php后端。我是否必须循环每个值并将其附加到请求正文?

这是我的代码

        let url = URL(string: "url.com/page")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"


        let id = user?["id"] as! String
        let party = partyName.text!

        let body = "id=\(id)&party_name=\(party)&party_invited=\(usersInvited)" 

        //********--usersInvited-- is the array i want to pass



        request.httpBody = body.data(using: String.Encoding.utf8)

        URLSession.shared.dataTask(with: request, completionHandler: { (data:Data?, response:URLResponse?, error:Error?) in

            DispatchQueue.main.async(execute: {

                if error == nil{

                    do{
                        let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary


                        guard let parseJSON = json else{
                            print("Error while parsing")
                            return
                        }


                       print(parseJSON["status"])

                    } catch{

                        print("Caught an error: \(error)")
                    }


                } else{
                    print("Error: \(error)")
                }

            })
        }).resume()

但是该代码将数组作为整个字符串发送,其输出如下:[“57”,“60”]

1 个答案:

答案 0 :(得分:1)

我猜,但看起来你想对你的数组进行JSON编码,但是作为一个URL参数?

(我假设usersInvited是一个字符串数组)

你可以通过JSONSerialisation吗?

let data = try! JSONSerialization.data(withJSONObject: usersInvited, options: [])
let string = String(data: d, encoding: .utf8)!

let body = "id=\(id)&party_name=\(party)&party_invited=\(string)"

或者如果那不是完全你想要的东西(你的问题中的逗号后面有空格),你可以手工完成吗?

let string = "[" + usersInvited.map { "\"\($0)\"" }.joined(separator: ", ") + "]"

我的投票是使用选项1并让服务器接受它输出的内容。

如果您的意思是希望它看起来像party_invited=1,2,3,4,那么您可以使用join来像这样转换数组

let string = usersInvited.joined(separator: ",")

let body = "id=\(id)&party_name=\(party)&party_invited=\(string)"

如果您的意思是想要这个party_invited=1&party_invited=2&party_invited=3,那么您可以使用map并加入

let string = usersInvited.map { "party_invited=\($0)" }.joined(separator: "&")

let body = "id=\(id)&party_name=\(party)&\(string)"