2016-09-15 52 views
8

我有一個時間理解與Swift 3簡單的JSON序列化原則熊我可以請得到一些幫助解碼JSON從一個網站到一個數組,所以我可以訪問它作爲jsonResult["team1"]["a"]等?下面是相關的代碼:JSONSerialization與Swift 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; 
}; 
} 

感謝

回答

10

在斯威夫特3,JSONSerialization.jsonObject(with:options:)返回類型已經成爲Any

(您可以在您的Xcode的快速幫助窗格檢查,以指着jsonResult。)

而且你不能要求類型爲Any變量任何方法或下標。您需要明確的類型轉換才能使用Any

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

和默認的元素類型的NSArrayNSDictionary默認值類型也變得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" } ] }