JSON 解析 --> Swift | JSON 写入中的***类型无效
Posted
技术标签:
【中文标题】JSON 解析 --> Swift | JSON 写入中的***类型无效【英文标题】:JSON Parsing --> Swift | Invalid top-level type in JSON write 【发布时间】:2016-12-23 10:42:30 【问题描述】:我正在尝试使用 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. MySQLi 连接永远不会关闭。 2. 不需要return json_encode(...);
。您应该改为exit()
。 3. 您应该为 JSON 数据使用适当的Content-Type
,即header('Content-Type: application/json');
。 4. 但是,问题的根源很可能在 Swift 代码的某个地方。
【参考方案1】:
documentation of NSJSONSerialization 说明了一些要求,您的 PHP 脚本中的 JSON 可能并不总是符合:
可以转换为 JSON 的对象必须具有以下内容 属性:
***对象是 NSArray 或 NSDictionary。 所有对象都是 NSString、NSNumber、NSArray、NSDictionary 或 NSNull 的实例。 所有字典键都是 NSString 的实例。 数字不是 NaN 或无穷大。
【讨论】:
我的PHP好像没问题,但是我觉得问题出在swift...上面我的swift有什么问题吗?以上是关于JSON 解析 --> Swift | JSON 写入中的***类型无效的主要内容,如果未能解决你的问题,请参考以下文章
使用 Alamofire 在 swift 3 中解析 Json
无法在 Swift 中解析 JSON。 “应解码 Dictionary<String, Any>,但找到了一个数组。” [复制]