簡體   English   中英

快速發送帶有對象數組的JSON作為Alamofire中的參數

[英]Send JSON with array of objects as parameter in Alamofire with swift

我是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)
 }

我的網絡服務方法如下所示:

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作為后端。

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

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)

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM