Swift 5-UrlSession-Post请求以数组开头



我对Swift很陌生。我有疑问。我必须发布一个以数组开头的请求。

像这样:

[{"columnName":"","columnLogic":"LIKE","columnValue":""}]

我试过用邮递员和退货价值,我想。

通常,如果它不是以";然后我可以发布请求并返回值。但从"["开始,我尝试了很多没有成功的事情:(请帮帮我!我添加了我使用的以"{"json post开始的代码,这些代码返回错误。`

private func getDataCars(){

struct Result: Codable {
let status: String
let document: DocumentStruct
}

struct DocumentStruct : Codable {
let pageno: Int
let total_count: String
let records: [RecordStruct]
}


struct RecordStruct: Codable{

let  user_id:String
let  user_name:String      
let  user_mail:String
let user_password:String
let user_phone:String
let user_durum:String

}

let parameters = [["columnName": "nameofcolumn", "columnLogic": "LIKE", "columnValue": "searchstring"]]
let url = URL(string: "http://getapiadress")!
let AuthTokenString = "somekey"
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("Bearer " + AuthTokenString, forHTTPHeaderField: "Authorization")

do {
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) // pass dictionary to data object and set it as request body
} catch let error {
print(error.localizedDescription)

}
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let task = session.dataTask(with: request, completionHandler: { data, response, error in
guard error == nil else {return}
guard let data = data else {return}
var result: Result?
do{
result=try JSONDecoder().decode(Result.self, from: data)
}
catch{
print("failed")
print(error)
}

guard let json = result else {
return
}

print(json.document.records[0].car_marka)

})
task.resume()

}`

这是我对邮件请求的回应:

{
"status": "success",
"code": 1,
"message": "users found",
"document": {
"pageno": "1",
"pagesize": "30",
"total_count": "1",
"records": [
{
"user_id": "1",
"user_name": "Boss",
"user_mail": "boss@boss.com",
"user_password": "boss",
"user_phone": "123456789",
"user_durum": "admin"
}
]
}

}

如果您想像开头提到的那样发送字典,但在XCode 中声明JSON变量时遇到运行时错误

[{"columnName":"","columnLogic":"LIKE","columnValue":""}]

然后在你的代码中,你可以这样做

// this is the dictionary format in Swift 
let parameters = ["columnName": "","columnLogic": "LIKE","columnValue": ""]
do {
// This step will convert your dictionary to jsonData
let jsonData = try? JSONSerialization.data(withJSONObject: parameters)
request.httpBody = jsonData
} catch let error {
print(error.localizedDescription)

}

但是,如果你想用一个对象数组发出POST请求,那么你可以做这样的

struct ColumnInfo: Codable {
let columnName: String
let columnLogic: String
let columnValue: String
}

let parameters = [ColumnInfo(columnName: "nameofcolumn", columnLogic: "LIKE", columnValue: "searchstring")]
let url = URL(string: "http://getapiadress")!
let AuthTokenString = "somekey"
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("Bearer " + AuthTokenString, forHTTPHeaderField: "Authorization")

do {
let jsonEncoder = JSONEncoder()
jsonEncoder.outputFormatting = .prettyPrinted
request.httpBody = try jsonEncoder.encode(parameters) // pass dictionary to data object and set it as request body
} catch let error {
print(error.localizedDescription)        
}

最新更新