在 Swift 中使用 Alamofire 发送包含字典对象数组的字典对象时会发生奇怪的行为?

Posted

技术标签:

【中文标题】在 Swift 中使用 Alamofire 发送包含字典对象数组的字典对象时会发生奇怪的行为?【英文标题】:Weird behavior occurs when sending a dictionary object that contains arrays of dictionary objects with Alamofire in Swift? 【发布时间】:2018-08-16 17:46:49 【问题描述】:

在这里,我在 Swift 中使用以下字典对象调用我的 API(Firebase 云函数):

let data: [String: Any] = [
    "array1": [1, 2, 3],
    "array2": [
        [
            "key1": "value1",
            "key2": "value2"
        ],
        [
            "key3": "value3",
            "key4": "value4"
        ]
    ]
]

因此,“array1”是一个整数数组,“array2”是一个字典对象数组。我的云功能除了发回收到的内容之外做任何其他事情:

exports.testFunction = functions.https.onRequest((req, res) => 
    return res.status(200).send(req.body)
)

要调用这个云函数,我使用的是Alamofire模块:

Alamofire.request(
    "<url>",
    method: .post,
    parameters: data,
    encoding: URLEncoding.httpBody,
    headers: [
        "Authorization": "...",
        "Accept": "application/json"
    ]
).responseJSON  (response) in
    print(response)

上面的“print”语句打印:

这意味着“array1”没有任何问题,但是云函数以某种方式接收“array2”作为单个对象的数组,该对象具有 4 个键和值对:

"array2": [
    
        "key1": "value1",
        "key2": "value2",
        "key3": "value3",
        "key4": "value4"
    
]

为什么会发生这种情况,我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

显然问题出在encoding参数上,只需将“URLEncoding.httpBody”切换为“JSONEncoding.default”即可解决问题!

【讨论】:

以上是关于在 Swift 中使用 Alamofire 发送包含字典对象数组的字典对象时会发生奇怪的行为?的主要内容,如果未能解决你的问题,请参考以下文章

使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数

如何使用 Alamofire SWIFT 在 post api 中发送 JSON

在swift中使用alamofire将参数作为原始数据发送。

在 Swift 中使用 Alamofire 网络进行解析时,如何在请求中发送内容类型?

如何在 swift 3 中使用 Alamofire 制作和发送字典数组(JSON 格式)发送到服务器

使用 Alamofire 3.0+ 在 swift 2.2 中使用 JSON 对象发送 POST 请求