2016-10-27 2 views
1

나는 포 스퀘어 API에서 다음 JSON을 얻고 난 데이터를 추출 고민되었습니다변환 JSON 중첩 된 객체

{ 
    "meta":{ 
    "code":200, 
    "requestId":"58122e59498e5506a1b23580" 
    }, 
    "response":{ 
    "venues":[ 
     { 
     "id":"4d56c381a747b60cd4a12c2b", 
     "name":"Sports Circle", 
     "contact":{}, 
     "location":{ 
      "lat":31.9, 
      "lng":35.9, 
      "labeledLatLngs":[ 
      { 
       "label":"display", 
       "lat":31.9, 
       "lng":35.90 
      } 
      ], 
     ], 
     "confident":true 
    } 
    } 
} 

내가 latlng 값에 추가 venues에서 name을 싶어. 지금까지이 작업을 시도했지만이 nil 때문에 그것은 JVenues에서 두 번째 if 문에서 가져옵니다이 다른 답변에서지고 무엇

func parseData (JSONData: Data){ 
    do { 
     var readableJson = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! [String:AnyObject] 

     if let JResponse = readableJson ["response"] as? [String:AnyObject] { 
      if let JVenues = JResponse["venues"] as? [String:AnyObject]{ 
       if let JName = JVenues["name"] as? String{ 
        NSLog(JName) 
       } 
      } 
     } 
    } catch { 
     print(error) 
    } 
} 

답변

2

. 당신이 그것을 모두 볼 수 있다면 아마 더 의미가있을 것입니다 ...

if let JResponse = readableJson ["response"] as? [String : AnyObject] { 
    if let JVenues = JResponse["venues"] as? [[String : AnyObject]] { 
     if let JName = JVenues.first?["name"] as? String { 
      NSLog(JName) 
     } 
    } 
} 

참고 이것은 단지 경기장 배열에서 첫 번째 이름을 가져옵니다.

편집 :

나는 이것을 좋아합니다. 구조체를 정의하고 구조체에 사전을 변환 : 클래스에서

struct Venue { 
    var name: String? 
    var venueId: String? 

    init(_ venueDictionary: [String : AnyObject]) { 
     self.name = venueDictionary["name"] as? String 
     self.venueId = venueDictionary["id"] as? String 
    } 
} 

이 같은 속성을 만들 : 당신의 JSON에서

var venues = [Venue]() 

는 장소의 배열에 사전을 매핑합니다. 컨벤션을위한 자본으로 시작하는 변수의 이름을 변경했습니다.

let venue = self.venues.first 
print(venue?.name) 

또는 :

if let venue = self.venues.find({ $0.name == "Sports Circle" }) { 
    print("found venue with id \(venue.venueId)") 
} 
+0

가 작동 한 설명에 감사드립니다 어디서나 클래스처럼

if let response = readableJson ["response"] as? [String : AnyObject] { if let responseVenues = response["venues"] as? [[String : AnyObject]] { self.venues = responseVenues.map({ Venue($0)) }) } } 

사용! 변수에 이름의 값에 액세스하려는 경우 신속히 대응하지 않아서 미안합니다. 어떻게 할 수 있습니까? 이 문제를 해결하는 방법에 대한 링크 또는 자습서가 있습니까? – Lara

+0

추가 도움이 추가되었습니다. 내 대답이 도움이된다면 투표 할 수 있습니다. 감사! – Frankie

+0

앱 전체에서 액세스 할 수있는 정보와 같이 여러 가지 영구적 인 정보가 필요한 경우 Core Data를 배우는 것이 좋습니다. – Frankie