JSON解析 - >斯威夫特| JSON写入中的顶级类型无效

时间:2016-12-23 10:42:30

标签: php json swift

我正在尝试使用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'

我完全不知道如何修复它,是的,我已经在线搜索并发现类似解决方案的问题,但我无法理解这些并且一些修复只是没有改变任何东西......

1 个答案:

答案 0 :(得分:0)

documentation of NSJSONSerialization声明了PHP脚本中的JSON可能并不总是符合以下要求:

  

可以转换为JSON的对象必须具有以下内容   属性:

     
      
  • 顶级对象是NSArray或NSDictionary。
  •   
  • 所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例。
  •   
  • 所有字典键都是NSString的实例。
  •   
  • 数字不是NaN或无穷大。
  •