2014-06-06 4 views
14

NSJSONSerialization을 사용하여 Swift 응용 프로그램에서 JSON을 구문 분석합니다. 그러나 반환 된 사전은 복잡하고 깊이 중첩 된 구조로 이루어져 매우 긴 형식 선언 (예 : Dictionary<String, Array<Dictionary<String, ....>>)을 사용하는 것은 비현실적입니다.Swift에서 중첩 된 사전을 어떻게 조작합니까? JSON 데이터?

Swift에서 컬렉션의 구조가 매우 복잡하고 런타임까지 유형을 알 수없는 그러한 구조로 작업하는 좋은 방법이 있습니까?

답변

12

은 그냥있는 NSDictionary로 JSON 데이터에 대한 참조를 잡아 :

var dict: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary 

은 다음 첨자를 사용하여 참조 할 수 있습니다 :

var myValue: NSString = dict["level1"]["level2"] 
+1

감사합니다. NSDictionary를 직접 사용하면 도움이됩니다. 그러나, 나는 그것이 subscripting을 구현한다고 생각하지 않는다 : 나는'objectForKey'를 호출해야만했다. – Bill

+1

동일한 문제가 발생했습니다. 내부 항목에 objectForKey를 호출하여 액세스 할 수 있어야합니다. 이렇게하지 않으면 문제가 발생하는 것뿐만 아니라 Xcode 6도 충돌하는 것 같습니다 ... – tibbon

+0

이것은 나를 위해 작동하지 않습니다. 나는 가지고있다 'var dict : NSDictionary = NSDictionary (contentsOfFile : "some/path"); – NRitH

5

myDictionary["accounts"]는 선택 될 수 있습니다. 시도 : myDictionary["accounts"]?["active"]?의 Obj-C에서

4

우리가 쓸 수

cityName = myDictionary[@"photos"][@"region"][@"city"]

여기 발견으로 몇 가지, 위에서 스위프트에 적용되지 않습니다, 적어도 나를 위해이 없다. 여기

let cityName = ((myDictionary!["photos"] as NSDictionary)["region"]! as NSDictionary)["city"]! as String`

나는 스위프트의 다음 업데이트에 그 모두가 우리가 가진 무엇으로 감소 될 수 있기를 바랍니다, 문자열에 대한 NSDictionary와 세 개의 인덱스에 액세스하면 스위프트에서이 작업을 수행하는 방법은 Obj-C에서.

+0

'NSDictionary'로 캐스트하고'(jsonResponse as NSDictionary) .valueForKeyPath ("geometry.location.lat")와 같이'valueForKeyPath'를 사용하면 훨씬 쉬울 것입니다. Int'. 그러나 사전에서 중첩 된 데이터를 가져 오는 또 다른 방법이 있습니다. +1 – GoodSp33d

+0

나는 같은 탐침을 쳤다. 이 일이 더 쉬워 졌습니까? 전체 구문 분석 및 전체 중첩 된 사전/배열 믹스 json typecast 자동화 된 방법을 찾고 있는데. –

관련 문제