2016-10-06 5 views
1

에 나는 다음과 같은 JSON이 있습니다스위프트 3 - 패스 사전 배열 내부 JSON의 또 다른 방법

{ 
    "stores":2, 
    "store_data":[ 
     { 
     "store_id":1, 
     "store_name":"Target" 
     "store_color":"000000" 
     }, 
     { 
     "store_id":2, 
     "store_name":"Walmart" 
     "store_color":"FFFFFF" 
     } 
    ] 
} 

내가 (함수 내에서) 다음과 같은 방법으로 그것을 수집하고 (안전 장치가 간단하게 제거) :

를 도우미 처리 기능에 보내기
let task = URLSession.shared.dataTask(with: baseURL) { (data, response, error) in 
    if let tmpRawData: NSDictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary { 
     process(rawData: tmpRawData) 
    } 
} 

과 같이 정의 :

func process(rawData: NSDictionary) -> Bool { 
    if let storeDataArray = rawData["store_data"] { 
     // Here I want to loop through the store_data array 
    } 
} 

그리고 내가하는 HAVi 위의 함수에서 배열을 통해 반복되는 문제.

for store: Dictionary<String, String> in storeDataArray { 
    // Do things with store["store_id"] here 
} 

을하지만 빠른 새로운 오전 등 NSArray를, 배열, 사전, NSDictionary와 사이 해독 문제가 내가 스위프트 3에서 일하고 있어요 어떤 도움이 많이 감사가 오전 : 처음에, 나는 시도했다!

답변

0

우선 무엇보다 많은 유형의 주석을 달지 마십시오. 에 {}으로 표시 - 그것은 모두의 명시 적 주석에게

둘째를 필요로하는 경우 컴파일러는이 작업이

typealias JSONObject = [String:Any] 

JSON 사전의 유형 별칭을 선언 편리 당신을 말할 것이다, tmpRawData는 사전입니다 JSON.

let task = URLSession.shared.dataTask(with: baseURL) { (data, response, error) in 
    if let tmpRawData = try JSONSerialization.jsonObject(with: data, options: []) as! JSONObject { 
    process(rawData: tmpRawData) 
    } 
} 

process 기능, 유형 별칭은 모든 것을 쉽게 읽을 수 있습니다.
rawData의 값은 JSON에서 []으로 표시되는 사전 배열입니다.

func process(rawData: JSONObject) -> Bool { 
    if let storeDataArray = rawData["store_data"] as? [JSONObject] { 
    for store in storeDataArray { 
     let storeID = store["store_id"] as! Int 
     let storeName = store["store_name"] as! String 
     let storeColor = store["store_color"] as! String 
    print(storeID, storeName, storeColor) 
    } 
    } 
} 

나는 모든 튜토리얼이 mutableContainers 옵션을 제안 이유를 모르겠어요. 원시 컬렉션 유형을 사용하는 경우 Swift에서 전혀 필요하지 않습니다.

+0

이것은 정확히 내가 필요한 것입니다! 나는 지나치게 노골적으로 생각하고 있었다. .. 고마워! –