Ios 如何处理HTTP GET请求-Swift返回的JSON?
这是我的代码:Ios 如何处理HTTP GET请求-Swift返回的JSON?,ios,json,swift,Ios,Json,Swift,这是我的代码: let myUrl = NSURL(string:"hostname/file.php"); let request = NSMutableURLRequest(URL:myUrl!); request.HTTPMethod = "GET"; NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data:NSData?, res
let myUrl = NSURL(string:"hostname/file.php");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "GET";
NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
dispatch_async(dispatch_get_main_queue())
{
if(error != nil)
{
//Display an alert message
return
}
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
if let parseJSON = json { /* when the app reach here , will enter the catch and get out */
let userId = parseJSON["id"] as? String
print(userId)
if(userId != nil)
{
NSUserDefaults.standardUserDefaults().setObject(parseJSON["id"], forKey: "id")
NSUserDefaults.standardUserDefaults().setObject(parseJSON["name"], forKey: "name")
NSUserDefaults.standardUserDefaults().synchronize()
} else {
// display an alert message
print("error")
}
}
} catch
{
print(error)
}
}
}).resume()
我的应用程序从php文件获取JSON,该文件将数组从数据库解析为JSON,并使用echo
返回它,它返回以下两行:
[{"id":"1","name":"CIT","adminstrator_id":"1"},{"id":"2","name":"HelpDesk","adminstrator_id":"1"}]
当我打印json
的描述时,我得到nil
我试图将json
转换为NSArray
,当我第一次打印json[0]
时,我得到了第一行,这很好,但是当我试图将json[0]
的结果转换为NSDictionary时,我仍然得到了零
当应用程序到达if语句if let parseJSON=json
时,它将进入catch,并且没有打印任何错误,我不知道为什么
这是我的php代码:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydb";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM department";
$result = $conn->query($sql);
$rows = array();
if ($result->num_rows > 0) {
// output data of each row
while($r = $result->fetch_assoc()) {
$rows[] = $r;
}
$conn->close();
echo json_encode($rows);
} else {
$conn->close();
echo "0 results";
}
?>
那么,是我的请求中的问题还是处理请求的问题 JSON是一个由
[String:String]
字典组成的数组
在JSON字符串中,[]
表示数组,{}
表示字典
不需要URL请求,因为GET
是默认模式.MutableContainers
也不需要,因为这些值是只读的
假设JSON返回多条记录。此代码只打印id
和name
的所有值
let myUrl = NSURL(string:"hostname/file.php")!
NSURLSession.sharedSession().dataTaskWithURL(myUrl) { (data, response, error) in
if error != nil {
print(error!)
} else {
do {
if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [[String:String]] {
for entry in json {
if let userId = entry["id"], name = entry["name"] {
print(userId, name)
}
}
} else {
print("JSON is not an array of dictionaries")
}
} catch let error as NSError {
print(error)
}
}
}.resume()
JSON是一个
[String:String]
字典数组
在JSON字符串中,[]
表示数组,{}
表示字典
不需要URL请求,因为GET
是默认模式.MutableContainers
也不需要,因为这些值是只读的
假设JSON返回多条记录。此代码只打印id
和name
的所有值
let myUrl = NSURL(string:"hostname/file.php")!
NSURLSession.sharedSession().dataTaskWithURL(myUrl) { (data, response, error) in
if error != nil {
print(error!)
} else {
do {
if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [[String:String]] {
for entry in json {
if let userId = entry["id"], name = entry["name"] {
print(userId, name)
}
}
} else {
print("JSON is not an array of dictionaries")
}
} catch let error as NSError {
print(error)
}
}
}.resume()
你能打印数据(转换成字符串)吗?
json
应该是一个NSDictionary还是一个NSArray?@Larme实际上是零,我只是打印出来,是的应该是一个NSDictionaryNSDictionary@LarmeJSON从DB返回多行,这不是问题吗?JSON毫无疑问是一个数组(用方括号表示)。问题是您的JSON是有效的,和NSJSONSerialization.JSONObjectWithData(数据:options:)
可以工作,但是castas?NSDictionary
无法工作,因为它是顶级的NSArray
。您可以打印数据(转换为字符串)吗?json
应该是一个NSDictionary还是一个NSArray?@Larme实际上是零,我只是打印出来,是的应该是一个NSDictionaryNSDictionary@LarmeJSON从DB返回多行,这不是问题吗?JSON毫无疑问是一个数组(用方括号表示)。问题是您的JSON是有效的,和NSJSONSerialization.JSONObjectWithData(数据:options:)
可以工作,但是castas?NSDictionary
无法工作,因为它是顶级的NSArray
。谢谢,这正是我需要的,因为我不熟悉使用swift的HTTP请求谢谢,这正是我需要的,因为我不熟悉使用swift的HTTP请求