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:)
可以工作,但是cast
as?NSDictionary
无法工作,因为它是顶级的
NSArray
。您可以打印数据(转换为字符串)吗?
json
应该是一个NSDictionary还是一个NSArray?@Larme实际上是零,我只是打印出来,是的应该是一个NSDictionaryNSDictionary@LarmeJSON从DB返回多行,这不是问题吗?JSON毫无疑问是一个数组(用方括号表示)。问题是您的JSON是有效的,和
NSJSONSerialization.JSONObjectWithData(数据:options:)
可以工作,但是cast
as?NSDictionary
无法工作,因为它是顶级的
NSArray
。谢谢,这正是我需要的,因为我不熟悉使用swift的HTTP请求谢谢,这正是我需要的,因为我不熟悉使用swift的HTTP请求