【发布时间】:2017-01-05 05:00:15
【问题描述】:
这是我的代码:
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 时,我仍然会得到 nil来自它
当应用程序到达 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是 NSDictionary 还是 NSArray? -
@Larme 实际上它是 nil 我只是打印它,是的意味着是一个 NSDictionary
-
@Larme JSON 从 DB 返回多行,不会是问题吗?
-
JSON 无疑是一个数组(用方括号表示)
-
问题是您的 JSON 是有效的,并且
NSJSONSerialization.JSONObjectWithData(data:options:)有效,但演员as? NSDictionary将不起作用,因为它是顶级的NSArray。