2016-01-24 106 views
1

类似的问题,在此之前,但有细微的差别已经公布,即:发送JSON或SwiftyJSON通过Alamofire POST

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

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