使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数

Posted

技术标签:

【中文标题】使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数【英文标题】:Send JSON with array of objects as parameter in Alamofire with swift 【发布时间】:2019-07-17 00:48:10 【问题描述】:

我对 Swift 和 Alamofire 很陌生,我想要完成的是发送一个数据结构,如下所示:


    "name" : "Test name",
    "intention" : "Purpose of practice test",
    "id_frequency" : "1",
    "member": [
        
        "id_member" : "1",
        "email" : "member1@gmail.com",
        "id_member_type" : 1
        ,
        
        "id_member" : "4",
        "email" : "member2@gmail.com",
        "id_member_type" : 3
        ,
        
        "id_member" : "7",
        "email" : "member3@gmail.com",
        "id_member_type" : 3
        ,
        
        "id_member" : "5",
        "email" : "member4@gmail.com",
        "id_member_type" : 3
        ,
        
        "id_member" : "6",
        "email" : "member5@gmail.com",
        "id_member_type" : 3
        
    ]

我着手构建所需 json 的方式如下:

 var membersArray = [AnyObject]()
 for i in 0..<members.count 
     let json: [String: Any]  = [
         "id_member": members[i].idMember!,
         "email": members[i].email!,
         "id_member_type": "\(Int(members[i].idMemberType)!)",
     ]
     membersArray.append(json as AnyObject)
 

 let jsonMembers = JSON(membersArray)

 let jsonObject: [String: Any]  = [
     "member" : jsonMembers,
     "name": name!,
     "intention": intention!,
     "id_frequency": frequency!
 ]

 let jsonUpdate = JSON(jsonObject)

有了这个结构化的 json,上面的行 (jsonUpdate)。我继续执行 webService。

 WevServices.createRequest(requestInfo: jsonUpdate)  (result) in
     print(result)
 

我的 webservice 方法,如下所示:

static func createRequest(requestInfo: JSON, completion: @escaping (_ result: String) -> Void)

    let url = URL(string: "http://ws.someURL.com/CreateRequest")

    let parameters: [String : Any] = ["name" : "\(requestInfo["name"])", "intention" : "\(requestInfo["intention"])", "id_frequency" : "\(requestInfo["id_frequency"])", "member": requestInfo["member"]]

    Alamofire.request(url!, method: .post, parameters: parameters, encoding: URLEncoding.httpBody).responseString  response in
        print(response)

    

我从服务器收到一个错误,表明发送数据不正确。

注意:我的应用程序使用 Lumen 作为后端。

【问题讨论】:

从 json 中你想获取什么 member 数据并作为参数发送? 【参考方案1】:

做你需要的最好的方法是:

func JSONToString(json: [String : String]) -> String?
    do 
        let mdata =  try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted) // json to the data
        let convertedString = String(data: mdata, encoding: String.Encoding.utf8) // the data will be converted to the string
        print("the converted json to string is : \(convertedString!)") // <-- here is ur string

        return convertedString!

     catch let myJSONError 
        print(myJSONError)
    
    return ""

对于 alamofire 请求,请执行以下操作:

static func createRequest(requestInfo: [String :String], completion: @escaping (_ result: String) -> Void)

    let url = URL(string: "http://ws.someURL.com/CreateRequest")

    let parameters: [String : Any] = ["request" : JSONToString(json : requestInfo)!]

    Alamofire.request(url!, method: .post, parameters: parameters, encoding: URLEncoding.httpBody).responseString  response in
        print(response)

    

【讨论】:

你的参数是字典,不是数组

以上是关于使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数的主要内容,如果未能解决你的问题,请参考以下文章

在 swift 中使用 alamofire 将参数作为原始数据发送

在 swift 中使用 alamofire 发送 JSON 数组作为参数

使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数

如何使用 Alamofire SWIFT 在 post api 中发送 JSON

在swift中使用alamofire将参数作为原始数据发送。

在 Swift 中使用 Alamofire 网络进行解析时,如何在请求中发送内容类型?