Swift字典对象数组发送至Firebase云函数后结构异常问题
问题原因与解决方案
问题根源
你遇到的结构变形问题,核心是Alamofire默认参数编码方式的特性导致的。Alamofire默认使用URLEncoding处理请求参数,这种编码是模拟HTML表单的提交格式(application/x-www-form-urlencoded),而表单格式本身不支持嵌套的数组+字典结构。
当你传入["assets": assets](assets是字典数组)时,URLEncoding会遍历所有子字典,把相同key(比如assetType、assetPath)对应的所有值提取出来合并成一个数组,最终就变成了云函数里看到的单字典结构——每个key对应一个包含所有值的数组。
解决办法
只需要将请求的参数编码方式改为JSONEncoding即可,因为JSON格式原生支持嵌套的数组和字典结构,能完整保留你原本的数据层级。修改后的请求代码如下:
Alamofire.request( "https://....", method: .post, parameters: ["assets": assets], encoding: JSONEncoding.default )
这样发送请求后,云函数中req.body.assets的结构就会和你Swift里的assets完全一致:
[ { "assetType": "video", "assetPath": "some_path" }, { "assetType": "image", "assetPath": "some_other_path" } ]
简单来说,JSONEncoding会把参数序列化为标准JSON字符串放在请求体里,不会像URLEncoding那样做扁平化处理,完美适配嵌套数据结构的传输需求。
内容的提问来源于stack exchange,提问作者K.Wu
相关产品推荐
相关产品推荐

