在 Swift 中发送到 firebase 云函数后,字典对象数组发生了变化?



我有一个名为assets的字典对象数组,当用 Swift 打印出来时,它显示:

[
["assetType": "video", "assetPath": "some_path"],
["assetType": "image", "assetPath": "some_other_path"]
]

但是,在我将其发送到我的Firebase Cloud函数并将其打印到云函数中后,这是完美的,assets变为:

[
{
"assetType": ["video", "image"],
"assetPath": ["some_path", "some_other_path"]
}
]

为什么会这样?我应该如何解决这个问题?

------------------------------更新------------------------------

我使用Alamofire模块来执行http请求:

Alamofire.request(
"https://....",
method: .post,
parameters: [
"assets": assets
]
)

------------------------------更新 2------------------------------

我的云功能如下:

exports.testFunction = functions.https.onRequest((req, res) => {
const { assets } = req.body;
return res.status(200).send(assets)
})

一旦被调用,它就会立即发回assets

更新:执行此操作Alamofire方法位于底部

我尝试了其他方法,只能回答问题的第二部分:我如何解决这个问题?显然,不使用Alamofire可以解决问题,但我相信Alamofire没有错,可能会缺少一些东西,我会挖掘更多,但现在,Alamofire的替代方案是URLSession

let session = URLSession.shared
let url: URL = URL(string: "https://...")!
let request = NSMutableURLRequest(url: URL)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
do {
request.httpBody = try JSONSerialization.data(
withJSONObject: [
"assets": assets
],
options: JSONSerialization.WritingOptions()
)
let task = session.dataTask(with: request as URLRequest) { (data, _, _) in
if let responseData = data {
print(String(data: responseData, encoding: .utf8)!)
}
}
task.resume()
} catch {
print(error)
}

它打印:

[
{
"assetType": "video",
"assetPath": "some_path"
},
{
"assetType": "image",
"assetPath": "some_other_path"
}
]

---------------------------阿拉莫火之路--------------------------

显然,阅读此处的文档,我也应该添加encoding选项:

Alamofire.request(
"https://...",
method: .post,
parameters: [
"assets": assets
],
encoding: JSONSerialization(options: [])
)

这个问题将得到解决。

最新更新