我正在尝试使用Swift从PHP文件中检索信息。我在网上看到我应该使用JSON解析(我认为它被称为)。所以我搜索并在网上找到了一些信息,引导我使用以下代码:
func dataOfJson(urlString: String) -> NSArray{
let url = NSURL(string: urlString);
if (url != nil)
{
let data = NSData(contentsOf: url as! URL);
if (data != nil)
{
return try! JSONSerialization.data(withJSONObject: data as Any) as AnyObject! as! NSArray;
}else{
//return "Error -> Data is nil!";
return try! JSONSerialization.data(withJSONObject: data as Any) as AnyObject! as! NSArray;
}
}else{
return ["Error -> url is empty!"] as NSArray;
}
}
我这样称呼上述函数:print(dataOfJson(urlString: "some url/test.php"));
我调用的URL具有以下PHP代码:
<?php
header("Content-Type: application/json");
require "dbconnect.php";
global $connect;
$result = array();
$temp = array();
if ($connect){
$fetch_data = mysqli_query($connect,"select * from dedi");
while ( $row = $fetch_data->fetch_object() ){
$temp = $row;
array_push($result,$temp);
}
echo json_encode($result);
return json_encode($result);
}
else{
echo json_encode("Something went wrong");
return json_encode("Something went wrong!");
}
mysqli_close(); ?>
可悲的是,当我尝试运行该项目时,出现以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write'
我完全不知道如何修复它,是的,我已经在线搜索并发现类似解决方案的问题,但我无法理解这些并且一些修复只是没有改变任何东西......
答案 0 :(得分:0)
documentation of NSJSONSerialization声明了PHP脚本中的JSON可能并不总是符合以下要求:
可以转换为JSON的对象必须具有以下内容 属性:
- 顶级对象是NSArray或NSDictionary。
- 所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例。
- 所有字典键都是NSString的实例。
- 数字不是NaN或无穷大。