2017-03-07 20 views
-2

私はSwift 3のPHPでmySQLから自分のGPS位置を取得する必要があります。データを取得するためのコードを書こうとしましたが、それでも動作しません。 PHPからSwift 3でJSONデータを解析する方法は?

JSONデータ:

[{ "ID": "3752"、 "緯度": "11.2222"、 "経度": "111.2222"、 "速度": "0.000000"、」ボルト ":" 3.97" 、 "パーセント": "87.000000"、 "日付": "2017年3月7日22時53分三十二秒"}]

スウィフト3コード:

import UIKit 
//-------- import google map library --------// 
import GoogleMaps 
import GooglePlaces 
class ViewController: UIViewController , GMSMapViewDelegate { 
    var placesClient: GMSPlacesClient! 
    override func viewDidLoad() { 
     super.viewDidLoad()  
     var abc : String = String()   
     //-------- Google key for ios --------// 
     GMSServices.provideAPIKey("XXXXXXXXXX") 
     GMSPlacesClient.provideAPIKey("XXXXXXXXX") 
     //--------set URL --------// 
     let myUrl = URL(string: "http://www.myweb/service.php");   
     var request = URLRequest(url:myUrl!)   
     request.httpMethod = "POST"   
     let postString = "";   
     request.httpBody = postString.data(using: String.Encoding.utf8);   
     let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in 
      if error != nil 
      { 
       print("error=\(error)") 
       return 
      }    
      // You can print out response object 
      print("response = \(response)")   

      do { 
       let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 

       if let parseJSON = json {      
        // Now we can access value of latiutde 
        let latitude= parseJSON["latitude"] as? String //<---- Here , which i need latitude value 
        print("latitude = \(latitude)")  
       } 
      } catch { 
       print(error) 
      } 
     } 
     task.resume()  

} 

コードを書こうとしましたが、デバッグ出力にエラーが表示されます

let responseString = String(data: data, encoding: .utf8) 
    let str = String(data: data, encoding: .utf8) 
    let data2 = str?.data(using: String.Encoding.utf8, allowLossyConversion: false)! 

    do { 
     let json = try JSONSerialization.jsonObject(with: data2!, options: []) as! [String: AnyObject] 
     if let names = json["latitude"] as? [String] { 
      print(names) 
     } 
    } catch let error as NSError { 
     print("Failed to load: \(error.localizedDescription)") 
    }    

} 

エラーメッセージは、型の値をキャストすることができませんでした '__NSSingleObjectArrayI'(0x1065fad60) 'NSDictionaryの'(0x1065fb288) に。

+0

「動作しません」と定義します。 – rmaddy

+0

また、http://stackoverflow.com/q/38155436/2415822 – JAL

+1

a l a m o f i r e –

答えて

0

jsonオブジェクトをSwift表現に直接キャストして、基になるデータの「Swifty」アクセスを試みてください。だから、あなたがする必要があるすべて、その後、あなたは[String: String]オブジェクト配列を持っていますがわからない場合、あなたはキャストで[String: Any]に置き換えることができ

guard let json = JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [[String: String]] else { return } 
guard json.count > 0 else { return } 
guard let lattitude = json[0]["lattitude"] else { return } 
print("Lattitude received: \(lattitude)") 

などのNSNumberと周りに大騒ぎする必要はありません。 lattitudeを読み込む際にオプションのキャストで型を調べてください。チェインオプションを追加して、 isEmptyをチェックして、必要なラジアチュード値か何かが間違っているかどうかをチェックできます。

コード内で!を使用することはほとんどありませんので、オプションの連鎖およびガードステートメントにもっと頼ってください。

Guard statement introduction

注:一行ガード文は非常に冗長ではありません、それは非常に困難なあなたのアプリケーションをデバッグすることになるかもしれません。ガードステートメントの本体にエラーやその他のデバッグ印刷を投げることを検討してください。

関連する問題