2016-09-27 15 views
0

私はSwift 3とPHPファイルの間のデータベース接続に取り組んでいます。 PHPへの情報の送信は、データベースに正しく転送されます。swift 3 json not working

しかし、データベースからmycodeに情報を印刷するときに問題が発生します。

私は私のアプリにこのJSONを送信しています:

[{"latitude":"51.430536341034","longitude":"5.45947450542819"}, 
{"latitude":"51.4305299243587","longitude":"5.45964865535365"}, 
{"latitude":"51.4305299243587","longitude":"5.45964865535365"}, 
{"latitude":"51.4305299243587","longitude":"5.45964865535365"}, 
{"latitude":"51.4305299243587","longitude":"5.45964865535365"}] 

私はXcodeで、このJSONを印刷:私は、このサイトで他のトピックで説明された2つのオプションを試してみました

print(NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!) 

、どちらも迅速な3とjsonの問題に関するものでした。

オプション1:

Signal SGBRT Could not cast value of type '__NSArrayI' (0x1b2a89cc8) to 'NSDictionary' (0x1b2a8a128).

オプション2:

let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! Dictionary<String, AnyObject> 

何が起こることと同じ信号SGBRTである私は、アプリを実行したとき

let parsedData = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:AnyObject] 

、エラーだが来ますエラー:

Could not cast value of type '__NSArrayI' (0x1b2a89cc8) to 'NSDictionary' (0x1b2a8a128).

私は専門家ではないと言わざるを得ないが、私は勉強が難しい学生であり、迅速なプログラムもない。したがって、私はここで、アプリのこの機能を終了するためにいくつかの助けを得ることを願っています。

あなたがこのトピックに答えるなら、ここで私が試してみるべき他のコードがあることを嬉しく思います。 ありがとうございます。

+1

まあ、配列は辞書ではありません... !!辞書の代わりに '[[String:AnyObject]]'という辞書の配列として結果をキャストする必要があります。 – Moritz

+0

そして、あなたは 'allowFragments'を必要としません。また、 'Dictionary 'は '[String:AnyObject]'と同じです。 – Moritz

+0

@EricAyaそれは特定のエラーを解決しますが、新しいものがすぐに表示されます。私はそれの緯度を取得したいとき:parsedData ["latitude"]それは型[[String:AnyObject]]と言うでしょうか?添字のメンバーはありません。 – royvano

答えて

0

あなたのJSONには、辞書の配列であることが明らかになっているので、辞書の配列[[String: AnyObject]]にキャストする必要があります。すでにコメントに記載されています。それはあなたを助けるかもしれない、以下試してみてください。

//First you should check for data whether it has value 
if let data = data { 
    //This gives you an array of dictionaries as per your JSON data. So safer side try to 'guard let' it so that it should not crash if your JSON data is nil 
    guard let parsedDataArray = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: AnyObject]] else { return } 

    //Here you can enumerate through your array to get each dictionary 
    for parsedDict in parsedDataArray { 
     //This gives the value of latitude 
     if let latitude = parsedDict["latitude"] { 
      print(latitude) 
     } 
     //And this is for "longitude" 
     if let longitude = parsedDict["longitude"] { 
      print(longitude) 
     } 
    } 
} 
1

あなたのJSON応答からAnyObjectを使用して、あなたが最初にそれを変換する必要があるため、それはあなたが[[String: String]]代わりの[[String: AnyObject]]を使用する必要があるということだけで応答した場合は、質問に追加したことをStringに二重ですので、[[String: String]]を使用するとバッターです。今度は辞書の配列を持つので、このようにすべての座標を取得します。

let parsedData = try? JSONSerialization.jsonObject(with: data!, options: []) as! [[String:String]] 
for dic in parsedData { 
    if let lat = Double(dic["latitude"]), let long = Double(dic["longitude"]) { 
     print(lat) 
     print(long) 
    } 
} 
+0

YESS!あなたのソリューションは機能します、私はとても感謝しています!誰も彼を評価することはできますか、私はそれを行うことはできません...しかし、本当に感謝Nirav D! – royvano

+0

ようこそメイト:) –