Разбор JSON в Swift 3 (CLLocationCoordinate2D) - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь проанализировать ссылку JSON с API Google Places iOS. Когда я печатаю координаты, это выглядит как

CLLocationCoordinate2D (широта: 0.0, долгота: 0.0)

, а не фактические координаты места. Я думаю, что это может быть проблема со словарем / объектом, но я потерялся для решения.

Ниже мой код синтаксического анализа JSON:

func parseJsonData(data: NSData) -> [GymGooglePlace] {

    do {

        typealias JSONDictionary = [String:Any]

        if let parsedData = try JSONSerialization.jsonObject(with: data as Data) as? JSONDictionary, let gyms = parsedData["results"] as? [JSONDictionary] {

            for gym in gyms {

                var coordinate = CLLocationCoordinate2D()
                var latitude:CLLocationDegrees!
                var longitude:CLLocationDegrees!

                var maxWidth:Int!
                var photoReference:String!
                let photoURL:String!

                if let geometry = gym["geometry"] as? [JSONDictionary] {

                    for result in geometry {

                        if let locations = result["location"] as? [JSONDictionary] {

                            for location in locations {

                                latitude = location["lat"] as! CLLocationDegrees!
                                longitude = location["lng"] as! CLLocationDegrees!

                                coordinate.latitude = latitude
                                coordinate.longitude = longitude
                            }
                        }
                    }
                }

                if let photos = gym["photos"] as? [JSONDictionary] {

                    for photo in photos {

                        maxWidth = photo["width"] as! Int!
                        photoReference = photo["photo_reference"] as! String!
                    }
                }

                photoURL = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=\(maxWidth!)&photoreference=\(photoReference!)&key=\(googleAPIKey)"

                print(photoURL)
                print(coordinate)
                print("spacespacespacespacespacespacespacespacespace")
            }
        }



    } catch {
        print(error)
    }

    return gymGooglePlaces
}

1 Ответ

0 голосов
/ 16 мая 2018

Значения для ключей geometry и location являются словарями, обратите внимание на массив {}, []

 if let geometry = gym["geometry"] as? JSONDictionary,
    let location = geometry["location"] as? JSONDictionary {
         coordinate.latitude = location["lat"] as! CLLocationDegrees
         coordinate.longitude = location["lng"] as! CLLocationDegrees
 }
...