Ios Alamofire.uploadmultipartFormData和JSONEncoding.default(Swift)

Ios Alamofire.uploadmultipartFormData和JSONEncoding.default(Swift),ios,swift,alamofire,Ios,Swift,Alamofire,我必须发送照片和json到服务器。 我的json是: {"anticorona":"Anti_Covid","time":"Time","navigateds":[{"collection_public_key":"Origin_Station.collection_public_key","station_public_key":&qu

我必须发送照片和json到服务器。 我的json是:

{"anticorona":"Anti_Covid","time":"Time","navigateds":[{"collection_public_key":"Origin_Station.collection_public_key","station_public_key":"Origin_Station.public_key"},{"station_public_key":"Des_Station.public_key","collection_public_key":"Des_Station.collection_public_key"}],"seats":"Seats","date":"Date"}
如何使用Alamofire.uploadmultipartFormData发送此json 我知道我可以在Alamofire.request中使用encoding:JSONEncoding.default,但在使用Alamofire.uploadmultipartFormData时可以使用JSONEncoding.default吗


谢谢

您似乎是新来的,如果您能在以后的问题中添加一些您尝试过的代码,那就太好了。无论如何,据我所知,这应该可以通过以下方式实现。我假设键
“navigateds”
保持不变。否则,还可以检查值(在for-in循环中)是否也是数组:

// set parameters for request
let antiCoronaParameters: Parameters = [
    "anticorona"   : "Anti_Covid",
    "time":"Time",
    "navigateds":[
      ["collection_public_key":"Origin_Station.collection_public_key", "station_public_key":"Origin_Station.public_key"],
      ["station_public_key":"Des_Station.public_key", "collection_public_key":"Des_Station.collection_public_key"]
    ],
    "seats":"Seats",
    "date":"Date"
]

let upload = AF.upload(multipartFormData: { (formData) in

    // I would append file data here first
    
    for (key, value) in antiCoronaParameters {
        if key == "navigateds" {
            do {
                let arrayData = try JSONSerialization.data(withJSONObject: value, options: .prettyPrinted)
                formData.append(arrayData, withName: key)
            } catch {
                print("could not append array, failed with error:", error)
            }
        } else if let string = value as? String, let stringData = string.data(using: String.Encoding.utf8, allowLossyConversion: false) {
            formData.append(stringData, withName: key)
        } else {
            print("could not append some data in parameters")
        }
    }
    
}, to: "https://www.yourURLhere.com/link.php", method: .post).validate()

upload.responseString { (responseString) in
    print(responseString)
}
这个答案是基于一个问题。在未来,我会建议尝试大量与你的问题相关的关键词。起初,搜索问题会花费更多的时间,但我相信你很快就会掌握窍门。下次再多尝试一点,也许;)

然而,正如你已经提到的,还有另一种方法,如果你想查看的话,我为你准备了它。基本上你已经提到过了,我总是更喜欢它而不是
上传
,除非有很好的理由:

// set parameters for request
let antiCoronaParameters: Parameters = [
    "anticorona"   : "Anti_Covid",
    "time":"Time",
    "navigateds":[
      ["collection_public_key":"Origin_Station.collection_public_key", "station_public_key":"Origin_Station.public_key"],
      ["station_public_key":"Des_Station.public_key", "collection_public_key":"Des_Station.collection_public_key"]
    ],
    "seats":"Seats",
    "date":"Date"
]

// request with json encoded parameters (e.g. sending to php)
let antiCoronaRequest = AF.request("https://www.yourURLhere.com/link.php", method: .post, parameters: antiCoronaParameters, encoding: JSONEncoding.default).validate()
    
antiCoronaRequest.responseString(completionHandler: { (response) in
    print(response)
})

如果您有任何问题,请联系我。

从请求中删除此默认json编码,因为它不适用于数据请求