Swiftを使用してPHPファイルから情報を取得しようとしています。私はJSONの構文解析(私はそれが呼ばれていると思う)を使うべきであることをオンラインで見てきました。だから私は、次のコードに私をリードするオンラインいくつかの情報を検索し、見つかった:JSON解析 - >スウィフト| JSONの無効なトップレベルタイプwrite
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コードのどこかにある可能性が最も高いです。 –