我需要用swift解析这个JSON响应和http请求
这是我用php编写的脚本,它有一个Json响应我需要用swift解析这个JSON响应和http请求,json,swift,post,http-post,Json,Swift,Post,Http Post,这是我用php编写的脚本,它有一个Json响应 <?php include "dbconnect.php"; $id = $_POST['id']; $uname = $_POST['uname']; try { $queryExistingBike = "SELECT StatoBici, Username FROM BICI INNER JOIN UTENTE ON utenteKEY = KEYutente WHERE (IdBike = '$id')"; $search =
<?php
include "dbconnect.php";
$id = $_POST['id'];
$uname = $_POST['uname'];
try {
$queryExistingBike = "SELECT StatoBici, Username FROM BICI INNER JOIN UTENTE ON utenteKEY = KEYutente WHERE (IdBike = '$id')";
$search = $connection->query($queryExistingBike);
//print_r ($search);
} catch (Exception $ex) {
echo $ex->getMessage();
}
$dati = $search->fetch_assoc();
if ($dati["Username"] == "$uname") {
$dati['Username'] = "true";
} else {
$dati['Username'] = "false";
}
//print_r($dati);
print json_encode($dati);
?>
这是swift中向web服务发出http post请求的代码
func jsonResponse(){
var request = URLRequest(url: URL(string: "http://bike1010.com/webservice/getBikeData.php")!)
request.httpMethod = "POST"
let postString = "id=2017&uname=admin" // Your parameter
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(String(describing: error))")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
}
let responseString = try? JSONSerialization.jsonObject(with: data, options:[])
print(responseString)
}
task.resume()
}
将输出转换为Xcode
Optional({
StatoBici : Ok
Username : Tue
})
如果这是您想要实现的目标:
let responseString = try? JSONSerialization.jsonObject(with: data, options:[]) as? [String:Any]
print(responseString)
//simple example for receiving each field from response
let statoBici:String = responseString["StatoBici"] as! String
let username:Bool = responseString["Username"] as! Bool
print("StatoBici received: \(statoBici), username received: \(username)")
正如Wojcik在评论中提到的,您已经有了解析JSON。您的
responseString
实际上是已解析的对象。您可以通过以下方式访问值:
if let obj = responseString as? NSDictionary {
let StatoBici = obj.value(for : "StatoBici") as! String
let okValue = obj.value(for : "OK") as! String // If OK is bool use bool
}
那么问题是什么呢?您已经解析了JSON并打印了结果。你想要实现什么?您想将其解析为一个对象,以便使用每个结果值作为键吗?
if let obj = responseString as? NSDictionary {
let StatoBici = obj.value(for : "StatoBici") as! String
let okValue = obj.value(for : "OK") as! String // If OK is bool use bool
}