Parse JSON Swift 3词典
问题描述:
我试图从这个JSON链接中获取NHL的所有31个团队。下面来看看哪些文件看起来像:Parse JSON Swift 3词典
{
"sports":[
{
"name":"hockey",
"slug":"hockey",
"id":70,
"uid":"s:70",
"leagues":[
{
"name":"National Hockey League",
"slug":"nhl",
"abbreviation":"nhl",
"id":90,
"uid":"s:70~l:90",
"groupId":9,
"shortName":"NHL",
"teams":[
{
...team info....
}......
我现在有这样做的声明在功能上“队”阵中试图环通的所有31项:
if let parsedData = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary {
if let entries: NSArray = parsedData["sports"] as! NSArray {
for entry in entries {
//work with data
}
}
}
我知道我必须深入研究“if let entry”行,但我似乎无法获得我想要的数据。提前致谢。
答
首先,为什么这么多的教程建议/人使用.mutableContainers
虽然对象是永远不会发生突变而具有讽刺意味的结果主要是分配给IM可变对象?
不要那样做。通过没有选项通过省略参数。
其次不要打Swift的强类型系统。使用本地收集类型Array
和Dictionary
,不要注释编译器可以推断的类型。
突然想到创建一个类型别名为方便起见:
typealias JSONDictionary = [String:Any]
if let parsedData = try JSONSerialization.jsonObject(with: data!) as? JSONDictionary,
关键sports
的值是数组(通过[]
表示)
let sports = parsedData["sports"] as? [JSONDictionary] {
枚举阵列和获取密钥的值leagues
这也是一个阵列
for sport in sports {
print("sport ", sport["name"] as? String ?? "n/a")
if let leagues = sport["leagues"] as? [JSONDictionary] {
做同样的leagues
,并获得teams
for league in leagues {
print("league ", league["name"] as? String ?? "n/a")
if let teams = league["teams"] as? [JSONDictionary] {
for team in teams {
解析JSON是很容易的,只有两种集合类型和四个值类型。
}
}
}
}
}
}
+0
工作!谢谢! –
提示:'parsedData [“sports”]'是一个数组,不是字典。 – rmaddy
我刚换了一下我的代码。获得了条目行,但我不能深入到“体育”数组中的“联盟”数组 –
不要在Swift中使用NSDictionary和NSArray。 – rmaddy