2016-09-15 4 views
8

Swift 3에서 간단한 JSON 직렬화 원칙을 이해하는 데 시간이 듭니다. 웹 사이트의 JSON을 배열로 디코딩하면 도움이 되었습니까? jsonResult["team1"]["a"] 등으로 액세스 할 수 있습니까? 여기에 관련 코드는 다음과 같습니다Swift를 사용한 JSONSerialization 3

let httprequest = URLSession.shared.dataTask(with: myurl){ (data, response, error) in 

self.label.text = "RESULT" 

    if error != nil { 

     print(error) 

    } else { 

     if let urlContent = data { 

      do { 

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

       print(jsonResult) //this part works fine 

       print(jsonResult["team1"]) 

       } catch { 

        print("JSON Processing Failed") 
       } 
      } 
     } 
    } 
    httprequest.resume() 

들어오는 JSON은 다음과 같습니다

{ 
team1 = { 
    a = 1; 
    b = 2; 
    c = red; 
}; 

team2 = { 
    a = 1; 
    b = 2; 
    c = yellow; 
}; 
team3 = { 
    a = 1; 
    b = 2; 
    c = green; 
}; 
} 

감사 스위프트 3에서

답변

10

, JSONSerialization.jsonObject(with:options:)의 반환 형식은 Any가되었다.

는 (당신은. jsonResult에 가리키는, 엑스 코드의 빠른 도움말 창에서 확인 가능)

그리고 당신은 Any로 입력 변수에 대한 어떠한 방법이나 첨자를 호출 할 수 없습니다. Any으로 작업하려면 명시 적 유형 변환이 필요합니다.

if let jsonResult = jsonResult as? [String: Any] { 
     print(jsonResult["team1"]) 
    } 

그리고 NSArray의 기본 요소 유형은 NSDictionary의 기본 값 유형은 Any을하게되었다. (이 모든 것을 "id-as-any"라고 간단히 부릅니다. SE-0116)

JSON 구조에 대해 자세히 알고 싶다면 다른 명시 적 유형 변환이 필요할 수 있습니다.

 if let team1 = jsonResult["team1"] as? [String: Any] { 
      print(team1["a"]) 
      print(team1["b"]) 
      print(team1["c"]) 
     } 
0

고맙습니다. OOPer의 정보가 도움이되었습니다. 하지만, 내 json을 다시 포맷하는 것이 실제로 도움이 된 것은 무엇입니까?

{ "teams": [ { "a": 1, "b": 2, "c": "red" }, { "a": 1, "b": 2, "c": "yellow" }, { "a": 1, "b": 2, "c": "green" } ] } 
관련 문제