在Alamofire POST方法中POST多个json对象 – Swift / IOS

对不起,如果我的问题不明确,我会尽量清楚解释。 所以这正是我想要做的,我正在尝试使用Alamofire发布多个评论(我的应用程序实现的东西,并且每当用户编写新评论时都将存储为JSON对象)。 我将这些JSON注释传递给我的post例程,在那里我可以使用SwiftyJSON来提取每个值。 Noe,我知道如何设置参数,如果我试图授权用户如下,

var parameters = [ "userName": userName, "password": passwordSalt, "somethingElse": somethingElse ] var err: NSError? request.HTTPBody = NSJSONSerialization.dataWithJSONObject(parameters , options: nil, error: &err) 

直到这里,这是非常直接的,现在是我的问题。 我正在尝试使用alamofire post发布多个json对象,这应该是这样的

 [ { "comment": "my First Comment", "commentDate": "2014-05-13 14:30 PM", "isSigned": 1, "patientId": 2, "documentId": 3 }, { "comment": "my SecondComment", "commentDate": "2014-05-14 14:30 PM", "isSigned": 2, "patientId": 3, "documentId": 4 }, { "comment": "my third Comment", "commentDate": "2014-05-15 14:30 PM", "isSigned": 3, "patientId": 4, "documentId": 5 } ] 

我如何通过迭代JSON对象创建上面的数组/ json(我不确定在什么叫这个)​​。 我知道如何从JSON对象获取JSON值我要问的是如何创建此参数变量来保存数据,如上例所示。 甚至可以使用Alamofire来做到这一点吗? (一次POST多个对象)

我尝试了几种方法,但他们没有成功

  1. var dictArray = [字典] var dict = Dictionary

    迭代JSON对象时插入dict中的每个值并将dict附加到dictArray ,现在当我尝试使用dictArray作为.dataWithJSONObject中的参数时,它不喜欢该对象。

  2. var dict = Dictionary var array = NSArray()

    通过遍历JSON对象并将它们插入到dict中并尝试将dict插入到数组中来提取每个值。 但这给出了一个不同的问题。 它构建对象的方式与所需的不同,如下所示。

    [{comment:my First Comment,commentDate:2015-05-13 13:30 PM“”,is签名:1,patientId:2,documentId:3},{评论:我的第二条评论,评论日期:2015-05-13 13 :30 PM“”,签名:2,patientId:5,documentId:4},{评论:我的第三条评论,评论日期:2015-06-13 13:30 PM“”,签名:5,patientId:1,documentId: 9}]

    这里的密钥不会被包含在引号内(正确的方式:“评论”,错误的方式:评论)。

有没有人尝试发布多个对象,alamofire是否能够这样做? 我希望我提出问题。 对不起,如果这个问题太简单无法回答,我花了整整一天来解决这个问题,但没有成功。 谢谢

Swift中您为已发布的评论对象数组的正确表示将如下所示:

  let comments: Array<[String:AnyObject]> = [ [ "comment": "my First Comment", "commentDate": "2014-05-13 14:30 PM", "isSigned": 1, "patientId": 2, "documentId": 3 ], [ "comment": "my SecondComment", "commentDate": "2014-05-14 14:30 PM", "isSigned": 2, "patientId": 3, "documentId": 4 ], [ "comment": "my third Comment", "commentDate": "2014-05-15 14:30 PM", "isSigned": 3, "patientId": 4, "documentId": 5 ] ] 

发送单个评论非常简单:

  let comment: [String:AnyObject] = [ "comment": "my First Comment", "commentDate": "2014-05-13 14:30 PM", "isSigned": 1, "patientId": 2, "documentId": 3 ] Alamofire.request(.POST, "http://httpbin.org/post", parameters: comment).responseJSON { (req, res, json, error) in println(req) println(res) println(json) println(error) } 

但是,为了发送一系列评论,您似乎必须生成自己的URLRequest,然后将其传递给Alamofire,如下所示:

  let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: "http://httpbin.org/post")!) mutableURLRequest.HTTPMethod = "POST" var error: NSError? = nil let options = NSJSONWritingOptions.allZeros if let data = NSJSONSerialization.dataWithJSONObject(comments, options: options, error: &error) { mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") mutableURLRequest.HTTPBody = data } Alamofire.request(mutableURLRequest).responseJSON { (req, res, json, error) in println(req) println(res) println(json) println(error) } 

如果您可以修改API后端以接受具有多个注释的对象,您也可以通过以下方式发送它们:

  Alamofire.request(.POST, "http://httpbin.org/post", parameters: ["comments": comments]).responseJSON { (req, res, json, error) in println(req) println(res) println(json) println(error) } 

问候。

我在使用API​​时在我的项目中遇到了类似的问题,现在允许一次发布多个对象。 如上所述的数组格式很好。

  let comments: Array<[String:AnyObject]> = [ [ "comment": "my First Comment", "commentDate": "2014-05-13 14:30 PM", "isSigned": 1, "patientId": 2, "documentId": 3 ], [ "comment": "my SecondComment", "commentDate": "2014-05-14 14:30 PM", "isSigned": 2, "patientId": 3, "documentId": 4 ], [ "comment": "my third Comment", "commentDate": "2014-05-15 14:30 PM", "isSigned": 3, "patientId": 4, "documentId": 5 ] ] 

然后我使用for循环发布数组的每个对象以发布API。

  var index = comments.count var i = 0 for i = 0; i < index; i++ { let urlString = "\(.baseURL)...etc" let parameters = comments[i] Alamofire.request(.POST, urlString, parameters: parameters) .responseJSON { (req, res, data, error) -> Void in // println(req) // println(res) // println(data) // println(error) println("\(i) of \(index) posted") } } 

如果API允许,更有效的方法,但否则此流程工作得很好。