2016-09-15 49 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" } ] }