我无法将对象数组转换为可以发送并存储到Web服务器的格式

时间:2019-06-17 08:03:59

标签: json swift dictionary http-post

我正在尝试使用urlsession将对象数组发送到Web服务器。我需要将对象数组转换为某种格式,然后再发送并存储到服务器中。

model.swift

class UserDetails 
{
    var name: String
    var phNumber: Int
    var pincode : Int
    var numberOfItems: Int

    init(name: String, number: Int, pin : Int, items: Int) {

        self.name = name
        self.phNumber = number
        self.pincode = pin
        self.numberOfItems = items
    }

}


/* viewController.swift */

    var users: [UserDetails] = []
    func sendLabDetails(userId: Int,users: [UserDetails], completion: @escaping (_ serverResponse: NSDictionary) -> Void)
        {
            let parameters = ["user_id": userId, "users": users] as [String : Any]
    }

我认为在调用带有对象的API时做错了。请为我提供一些代码,以帮助我了解如何将对象数组转换为字典数组或任何其他JSON支持的格式。

1 个答案:

答案 0 :(得分:0)

如果您有Dictionary,则可以使用JSONEncoder将其转换为JSON:

 let parameters = ["user_id": "newID", "users": "newUser"]
 do{
    let jsonParameter = try JSONEncoder().encode(parameters)
}catch{
    print(error.localizedDescription)
}
  

注意: :对对象进行编码意味着该对象符合协议CodableAny不符合此协议,因此无法将其编码为JSON。   为此,您可以使类UserDetails符合该协议,或者由于[String:Any]不好而必须更改数据结构。

示例:

class UserDetails: Codable //Be sure to make the class to conform to this protocol if needed
{
    var name: String
    var phNumber: Int
    var pincode : Int
    var numberOfItems: Int

    init(name: String, number: Int, pin : Int, items: Int) {

        self.name = name
        self.phNumber = number
        self.pincode = pin
        self.numberOfItems = items
    }

}

//Now you can encode:

var users: [UserDetails] = []

    func sendLabDetails(userId: Int,users: [UserDetails], completion: @escaping (_ serverResponse: NSDictionary) -> Void)
        {
            let parameters = ["user_id": userId, "users": users]
            do{
    let jsonParameter = try JSONEncoder().encode(parameters)
    //HERE YOU CAN USE jsonParameter to send data to server
}catch{
    print(error.localizedDescription)
}
    }