2016-12-23 14 views
0

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' 

私はそれを修正する方法は全く考えていません。はい、私はオンラインで検索して解決策に似た問題を見つけましたが、これらを理解することができず、何も修正していない修正がいくつかありました...

+0

1. MySQLi接続は決して閉じられません。 2. return json_encode(...);の必要はありません。代わりに 'exit()'を実行する必要があります。 3. JSONデータに適切な 'Content-Type'を使用する必要があります。つまり' header( 'Content-Type:application/json'); ' 4.ただし、問題の原因はSwiftコードのどこかにある可能性が最も高いです。 –

答えて

0

documentation of NSJSONSerializationはPHPスクリプトのJSONがおそらく必ずしも以下の要件を満たしていないと述べています:

+0

私のPHPは問題ないと思われますが、問題は迅速に起こると思います...上記の私の迅速な問題はありますか? – Nobody