2017-01-29 2 views
0

Я хочу, чтобы извлечь имена этих coffes это выдержка из моего выхода, потому что я как 1000 имен, и я хочу, чтобы принимать их все автоматически:Получение всех значений этого вывода JSON

results =  (
      { 
     geometry =    { 
      location =     { 
       lat = "-33.3979227"; 
       lng = "-70.58503859999999"; 
      }; 
      viewport =     { 
       northeast =      { 
        lat = "-33.39783990000001"; 
        lng = "-70.58502229999999"; 
       }; 
       southwest =      { 
        lat = "-33.39795669999999"; 
        lng = "-70.58507830000001"; 
       }; 
      }; 
     }; 
     id = 46354da06de96a36c5c44a5fa05a10f8f83f8edd; 
     name = "Hotel Bidasoa"; 
     "opening_hours" =    { 
      "open_now" = 1; 
      "weekday_text" =     (
      ); 
     }; 
      } 
     ); 
     "place_id" = ChIJ4dfUCC7PYpYRRDkSNifrfBE; 
     rating = "4.7"; 
     scope = GOOGLE; 
     types =    (
      cafe, 
      lodging, 
      food, 
      store, 
      "point_of_interest", 
      establishment 
     ); 
     vicinity = "Avenida Vitacura 4873, Santiago, Santiago"; 
    }, 
      { 
     geometry =    { 
      location =     { 
       lat = "-33.37900460000001"; 
       lng = "-70.55533029999999"; 
      }; 
      viewport =     { 
       northeast =      { 
        lat = "-33.37897230000002"; 
        lng = "-70.5553148"; 
       }; 
       southwest =      { 
        lat = "-33.37910149999999"; 
        lng = "-70.55537679999999"; 
       }; 
      }; 
     }; 
     id = c451d2146b7a065fa1afd0ffa39353a4b1cae178; 
     name = "Ceibo Emporio Cafeter\U00eda"; 
     "opening_hours" =    { 
      "open_now" = 0; 
      "weekday_text" =     (
      ); 
     }; 

и Тхи мой код, но печатает только мне первое имя я хочу и потому, что у меня есть, как 1000 имен:

let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 

       print (jsonResult) 

        if let nombre = ((jsonResult["results"]as?NSArray)?[0]as?NSDictionary)?["name"] { 
         print (nombre) 
        } 

ответ

0

Как всегда:

  • Никогда использовать NSDictionary/NSArray в Swift при разборе JSON.
  • НикогдаmutableContainers в Swift. Это совершенно бесполезно.

Чтобы получить все элементы в массиве results использовать петлю, для удобства и читаемости использовать псевдоним типа:

typealias JSONDictionary = [String:Any] 

if let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: []) as? JSONDictionary { 

    print (jsonResult) 
    if let results = jsonResult["results"] as? [JSONDictionary] { 
     for result in results { 
      print(result["name"] as? String ?? "n/a") 
      if let geometry = result["geometry"] as? JSONDictionary, 
      let location = geometry["location"] as? JSONDictionary { 
       let lat = location["lat"] as? Double ?? 0.0 
       let lng = location["lng"] as? Double ?? 0.0 
       print("latitude: \(lat)") 
       print("longitude: \(lng)") 
      } 
     } 
    } 
} 
+0

exacty то, что мне нужно! большое спасибо – user1781908

+0

и как я обращаюсь к геометрии - местоположение - лат? – user1781908

+0

Я обновил ответ. – vadian

Смежные вопросы