之前已经发布了类似的问题,但略有不同,即:
Alamofire: Sending JSON as request parameter
POST multiple json objects in Alamofire POST method - Swift/IOS
Sending json array via Alamofire
是最后一个,最接近我当前的问题。但是,这个解决方案对我不起作用。
我面临的问题是我正在尝试发送Alamofire POST请求,这是我使用SwiftyJSON构建的JSON。就像这样:
let url = NSURL(string: orderProductsEndpoint)
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.setValue(requestToken, forHTTPHeaderField: "Authorization:")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let params = [ json.object ]
print(params)
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject( params, options: [])
Alamofire.request(request)
.responseString{ response in
switch response.result {
case .Success(let value):
print("gut")
print(value)
case .Failure(let error):
print("not gut")
print(error)
}
}
然而,这不能很好地运行,因为我正在与之通信的API似乎并不能很好地识别我正在发送的参数。
但后来我注意到我发送的内容不是有效的JSON。这就是我发送的内容:
[{
car = (
{
cant = 2;
id = 6;
name = "Saudi Plate";
},
{
cant = 1;
id = 5;
name = "Beef Wrap";
}
);
idUser = 58;
"total_loyalty_points" = 4200;
"total_price" = 42000;}]
但在使用
将我的JSON转换为对象之前let params = [ json.object ]
这是通过JSONLint验证的有效JSON,它看起来像这样
{
"total_price" : 42000,
"car" : [
{
"id" : "6",
"cant" : 2,
"name" : "Saudi Plate"
},
{
"id" : "5",
"cant" : 1,
"name" : "Beef Wrap"
}
],
"idUser" : 58,
"total_loyalty_points" : 4200
}
所以问题是我被迫改变JSON的结构,因为它似乎是通过Alamofire将其转换为对象的唯一方式。有没有办法通过Alamofire实际发送原始JSON?
答案 0 :(得分:0)
尝试在Alamofire请求中为参数设置json编码。
Alamofire.request("http://...", method: HTTPMethod.post, parameters: parameters, encoding: JSONEncoding.default, headers: nil)
.responseJSON(completionHandler: {(response) in ... })