如何处理从HTTP GET请求返回的JSON - Swift?

时间:2016-08-29 08:19:37

标签: 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?, 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返回它并返回以下2行:

[{"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时,它将进入捕获并且它不会打印任何错误,我不知道为什么?

这是我的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";
}
?>

我的请求或处理请求的问题是什么?

1 个答案:

答案 0 :(得分:2)

JSON是struct container { void *data; int count; }; void tree_walk_recurse(const t_node *node, void (*func)(void *, void *), void *data) { if (node->left) tree_walk_recurse(node->left, func, data); func(node->data, data); if (node->right) tree_walk_recurse(node->right, func, data); } void tree_walk(const t_node *root, void (*func)(void *, void), void *data) { if (root && func) tree_walk_recurse(root, func, data); } void insert(void *data, void *ptr) { struct data *array = ptr; array->data[array->count++] = data; } /* Traverse in-order using insert */ struct container array; array.data = malloc(sizeof(struct data) * n); array.count = 0; tree_walk(root, insert, &array); 词典的数组。

在JSON字符串中[String:String]表示数组,[]表示字典。

不需要URLRequest,因为{}是默认模式。不需要GET因为只读取了值。

考虑JSON返回多条记录。此代码只打印.MutableContainersid的所有值。

name