代码之家  ›  专栏  ›  技术社区  ›  K.Wu

当发送一个dictionary对象时,如果该对象包含使用Swift中的Alamofire的dictionary对象数组,就会发生奇怪的行为?

  •  0
  • K.Wu  · 技术社区  · 7 年前

    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)
    }
    

    上面的“打印”语句打印:

    enter image description here

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

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   K.Wu    7 年前

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

    推荐文章