我正在尝试从我的MYSQL数据库中读取一行并将其转换为我的应用程序中的字符串数组。
我的php文件:
<?php
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'diplomarbeit_testdatenbank';
$db_link = mysqli_connect($host, $user, $password, $database);
$sql = "SELECT Kategorie FROM Kategorien WHERE Anzeige = '1'";
$result = mysqli_query($db_link, $sql);
$records = array();
$array = array();
while($row = mysqli_fetch_assoc($result)){
$records['Kategorie'] = $row['Kategorie'];
array_push($array, $records);
}
echo json_encode($array);
?>
...给我输出:
[{ “Kategorie”: “外部对象”},{ “Kategorie”: “主页”},{ “Kategorie”: “莱勒尔”},{ “Kategorie”: “Oeffnungszeiten”},{ “Kategorie”:” Orientierung “},{” Kategorie “:” Schulleitung“}]
我的应用程序中的功能(使用Xcode 8和Swift 3):
func get()
{
do{
let dburl = URL(string: "http://127.0.0.1/index.php")
let dbdata = try Data(contentsOf: dburl!)
let json = try JSONSerialization.jsonObject(with: dbdata, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:AnyObject]
if let arrJSON = json["Kategorie"]
{
for indexx in 0...arrJSON.count-1
{
let aObject = arrJSON[indexx]
TableArray.append(aObject as! String)
}
}
}
catch let error as NSError{
print("Failed to load: \(error.localizedDescription)")
}
}
它没有向我显示任何错误或类似的东西。当我模拟它时,应用程序冻结在我尝试序列化的行。
显而易见的问题是:这里有什么问题?
答案 0 :(得分:0)
问题在于这一行:
let json = try JSONSerialization.jsonObject(with: dbdata, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:AnyObject]
您的数据是[String:Any]
词典数组。但是你将它投射到[String:AnyObject]
将该行更改为:
let json = try JSONSerialization.jsonObject(with: dbdata, options: JSONSerialization.ReadingOptions.mutableContainers) as! [[String:Any]]
当然,您必须在此之后修改其余的数据解析代码,因为您需要遍历数组以从每个字典实例中获取值。