2017-10-30 7 views
1

JSONを "https://maps.googleapis.com/maps/api/place/nearbysearch/json?"から(swift 3)にしようとしています)配列を持つtableView Controller。 Google apiから返されるデータは辞書で、tableViewを配置する際のエラーは自分のコードでどうすればよいですか?「https://maps.googleapis.com/maps/api/place/nearbysearch/json?」からJSONをスワイプに配列する方法

どれ回答は参考になります

これは私のコードです:

var listData : [[String : AnyObject]] = [[String : AnyObject]]() 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.dataSource = self 
    self.tableView.delegate = self 

    let myURL : URL = URL(string: "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=13.88068,100.43575&radius=300&type=gas_station&key=YOURKEY")! 

    Alamofire.request(myURL).responseJSON(completionHandler: { 
     response in 
     switch response.result{ 
     case .success: 

      self.listData = response.result.value as! [[String : AnyObject]] 

      print(self.listData.description) 

      self.tableView.reloadData() 

      case .failure(let error): 
      print(error) 
     } 

    }) 
+0

は、JSONの構造を理解し、解析する方法を学びます。 'let json = response.result.valueを[String:Any]とします。 self.listData = json ["result"] [[String:Any]] '(ただし、letとその他のチェックを行う必要がある場合)。 – Larme

+0

このJSONからどのようなデータが必要ですか? –

+0

@ a.afanasiev 私はgoogleのWebサービスから地名+の説明とGoogleの場所のデータのリストを取得し、それをtableViewに入れたいと思います。 Googleの近くの場所APIを使用しようとしていますが、「タイプ」と半径をフィルタリングできません。 – theICE

答えて

1

あなたは(より正確には、辞書の配列)配列に結果をキャストしています。しかし、応答は配列ではありません。それは辞書です。しかし、そのresultsキーに関連付けられた値が辞書の配列です:

var listData = [[String: Any]]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.dataSource = self 
    tableView.delegate = self 

    let url = URL(string: "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=13.88068,100.43575&radius=300&type=gas_station&key=YOURKEY")! 

    Alamofire.request(url).responseJSON { response in 
     switch response.result { 
     case .success(let value): 
      guard let json = value as? [String: Any], let listData = json["results"] as? [[String: Any]] else { 
       print("Response does not contain results") 
       return 
      } 

      self.listData = listData 

      print(listData) 

      self.tableView.reloadData() 

     case .failure(let error): 
      print(error) 
     } 
    } 
} 
+0

ありがとうございます@Robそれは働いています^^ – theICE

+0

私はあなたの質問に答えたら、私の答えの左側のチェックマークをクリックして私の答えを受け入れることを検討してください。 「誰かが私の質問に答えたときに何をすべきですか?」(https://stackoverflow.com/help/someone-answers)を参照してください。 – Rob

関連する問題