我有一个帖子请求有这样的身体
{
"cars": [
{
"id": 126,
"drivers": [
"xxx@gmail.com"
]
},
{
"id": 128,
"drivers": [
"mmm@gmail.com"
]
}
]
}
id和驱动程序是可更改的,我从另一个API获取它们以便如何使用post请求发送此正文?
另一方面,我有一个textField,它接收另一封驱动程序的电子邮件,我想在发送此请求时更改驱动程序。
示例:
{
"cars": [
{
"id": 126,
"drivers": [
"xxx@gmail.com",
"sss@gmail.com"
]
},
{
"id": 128,
"drivers": [
"mmm@gmail.com"
]
}
]
}
正如您所看到的,当我点击特定textField
上的添加按钮取决于ID时,我想要将驱动程序更新为新驱动程序。
这是我的代码
public static func loadDrivers(owners: [Owner], drivers: [Driver], driverEmail: String!, i: Int, completion: @escaping (_ code:Int?)-> Void) {
let headers: HTTPHeaders = [
"Accept": "application/json"
]
var para2 = [String : [[String : Any]]]()
para2 = [
"cars": [
[
"id": owners[i].id,
"drivers": [
drivers[i].email,
driverEmail
]
]
]
]
if driverEmail != nil {
Alamofire.request(APIHelper.BASE_URL + APIHelper.API.ADD_DRIVERS.rawValue, method: .post, parameters: para2, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
switch response.result {
case .success:
let json = response.result.value as? NSDictionary
let code = json!["code"]
completion(code as? Int)
case .failure(let error):
print(error)
completion(nil)
return
}
}
}
}
提前致谢
答案 0 :(得分:1)
这个问题在我身上尖叫着Codable
协议,所以就这样吧。 Codable
协议使用真正的Swift对象生成JSON变得轻而易举。在游乐场试试这个:
import Cocoa
struct Car : Codable {
let id:Int
let drivers:[String] // you will want to improve on this
}
struct Mobiles : Codable {
let cars:[Car]
}
var mobiles = Mobiles(cars:[Car(id:126, drivers:["xxx@gmail.com", "sss@gmail.com"]),
Car(id:128, drivers:["mmm@gmail.com"])])
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
print(String(data:try encoder.encode(mobiles), encoding:.utf8)!)
由于您应该能够在此等式的两端使用Swift,因此很容易看出这需要比您的示例更少的 lot 代码。
答案 1 :(得分:0)
正如你在Json的例子中所说,你在“汽车”中有一系列词典。字段,但你在这一行的字典里面写了一个字典:
var para2 = [String : [[String : Any]]]()
您可以这样定义para2:
var para2 = [String, Array<[String:Any]>]
然后将其作为参数发送