如何在 Alamofire API 请求的正文中发送嵌套对象?

How can you send a nested object in the body of an Alamofire API request?

我尝试使用 Alamofire 发出这样的 API 请求:

let param = ["id":"xy", "products":[["quantity":2, "product":["id":123]]]]

Alamofire.request(url, method: .post,
                   parameters: param, encoding: URLEncoding.default, 
                      headers: ["Accept": "application/json", "Content-Type": "application/json"]).responseJSON ..

我收到了这个回复:

message = "Unexpected token i in JSON at position 0";
statusCode = 400;

我也试过这样申请:

request.httpBody = try! JSONSerialization.data(withJSONObject: param)

我尝试手动执行以下请求以确保它工作正常:

curl -X POST http://url -d'{"id":"xy", "products" [{"quantity":2,"product":{"id":123}}]}' -H'Content-Type: application/json'

如我所愿,它给了我这样的回复:

{
    "id":"xy",
    "products":[
        {
            "quantity":2,
            "product":{
                "id":123
            }
        }
    ]
}

您需要将请求作为 application/json 发送,因此使用 JSONEncoding.default 作为 encoding 参数。

Alamofire.request( url, method: .post , parameters: param, encoding: JSONEncoding.default , headers: ["Accept": "application/json",
                      "Content-Type": "application/json"])

Add-on:另外,您可以从 header 参数中删除 Content-TypeAF 会为您处理。