通过Alamofire POST发送JSON或SwiftyJSON

时间:2016-01-24 14:56:32

标签: ios json swift2 alamofire swifty-json

之前已经发布了类似的问题,但略有不同,即:

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?

1 个答案:

答案 0 :(得分:0)

尝试在Alamofire请求中为参数设置json编码。

Alamofire.request("http://...", method: HTTPMethod.post, parameters: parameters, encoding: JSONEncoding.default, headers: nil)
         .responseJSON(completionHandler: {(response) in ... })

https://github.com/Alamofire/Alamofire#json-encoding