如何使用Alamofire将来自SwiftyJSON对象的JSON正文添加到包含不同参数的POST请求中?

如何使用Alamofire将来自SwiftyJSON对象的JSON正文添加到包含不同参数的POST请求中?,json,swift,http,alamofire,google-cloud-vision,Json,Swift,Http,Alamofire,Google Cloud Vision,我在SO中阅读了答案,并查看了官方的Alamofire文档,但大多数答案都增加了对JSON数据是添加到URL参数还是添加到正文的混淆 HTTP请求必须包含一个参数键,该参数键等于访问API的API键和包含图像数据和一些与API相关的数据的JSON键 带有请求参数的URL如下所示: JSON结构位于 我的Swift代码如下所示 import SwiftyJSON import Alamofire // all imports are done func requestAPI(body:J

我在SO中阅读了答案,并查看了官方的Alamofire文档,但大多数答案都增加了对JSON数据是添加到URL参数还是添加到正文的混淆

HTTP请求必须包含一个参数键,该参数键等于访问API的API键和包含图像数据和一些与API相关的数据的JSON键

带有请求参数的URL如下所示: JSON结构位于

我的Swift代码如下所示

import SwiftyJSON
import Alamofire
    // all imports are done

func requestAPI(body:JSON) -> JSON {
    let APIKey:String = "My_API_KEY"
      let header = ["Content-Type":"application/json"]
      let url:String = "https://vision.googleapis.com/v1/images:annotate"
      let parameters = ["key":APIKey]
      var response = Alamofire.request(.POST,url,headers:header,parameters:parameters)
      response.validate().responseJSON { response in
        switch response.result {
        case .Success:
          if let value = response.result.value {
            let json = JSON(value)
            print("JSON: \(json)")
            print(response.request)
          }
        case .Failure(let error):
          print(error)
        }
      }
return body //dummy return
}
我确实查阅了阿拉莫菲尔的文件。 从 带有URL编码参数的POST请求 文件的第一节

let parameters = [
    "foo": "bar",
    "baz": ["a", 1],
    "qux": [
        "x": 1,
        "y": 2,
        "z": 3
    ]
]

Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters)
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3
我的理解是,作为parameters参数传递的JSON作为参数添加到HTTp POST请求的URL中(类似于请求的key:My_API_key部分)。并使用.JSON作为编码选项,将parameters参数添加为请求的JSON主体。我如何做到这两个方面(一个是URL编码的参数键,另一个是添加到HTTP正文中的JSON数据)?Alamofire的请求方法似乎正在使用相同的参数执行2个操作中的任何一个

我尝试创建一个NSURLMutableRequest并添加主体。但是在访问SwiftyJSON对象的rawValue时,我得到了以下错误。 错误:调用可以抛出,但未标记为“try”,并且未处理错误 如果让bodyData:NSData=body.rawData(){

这是代码

func requestAPI(body:JSON) -> JSON {
  let APIKey:String = "My_API_Key"
  let header = ["Content-Type":"application/json"]
  let url = NSURL(string:"https://vision.googleapis.com/v1/images:annotate")
  let parameters = ["key":APIKey]
  var request = NSMutableURLRequest(URL:url!)
  request.HTTPMethod = "POST"
  if let bodyData:NSData = body.rawData(){
    request.HTTPBody = bodyData
  }
  let encoding = Alamofire.ParameterEncoding.URL
  (request, _) = encoding.encode(request, parameters: parameters) // Parameters are added here
  var response = Alamofire.request(.POST,url!,headers:header,parameters:parameters)
  response.validate().responseJSON { response in
    switch response.result {
    case .Success:
      if let value = response.result.value {
        let json = JSON(value)
        print("JSON: \(json)")
        //return json
        print(response.request)
      }
    case .Failure(let error):
      print(error)
    }
  }

  return body //dummy return
}

我在哪里以及如何将请求的HTTP正文设置为JsonData,并用参数对URL进行编码?

我想这包括在
Alamofire
文档中。谢谢你的评论Kye。我更新了我的问题,以补充我对Alamofire文档的理解,并尝试更具体一些。