swift2 通过Alamofire POST发送JSON或SwiftyJSON

pw136qt2  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(207)

类似的问题之前已经发布过,但略有不同,即:
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?

k3fezbri

k3fezbri1#

尝试为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

i7uaboj4

i7uaboj42#

尝试将您的参数作为Alamofire参数,即[String:任何]。
基本上你要用帖子的方法发送生json。

下面的函数将使用原始json执行发布请求。这也是使用泛型

func nwCallRawJSon<T: Decodable>(url : String, param : [String : Any],decodable: T.Type,onCompletion: @escaping (T?,Error?) -> Void){
        AF.request(url, method: .post, parameters : param, encoding: JSONEncoding.default, headers: nil).validate(contentType: ["application/json"]).responseDecodable { (response: DataResponse<T,AFError>) in
            switch response.result {
            case .success(let data):
                onCompletion(data,nil)
            case .failure(let error):
                onCompletion(nil,error)
            }
        }
    }

相关问题