解析JSON Swift 3字典
我试图通过这个JSON链接从NHL获得所有31个团队。下面是该文件的外观:解析JSON Swift 3字典,json,swift,parsing,dictionary,swift3,Json,Swift,Parsing,Dictionary,Swift3,我试图通过这个JSON链接从NHL获得所有31个团队。下面是该文件的外观: { "sports":[ { "name":"hockey", "slug":"hockey", "id":70, "uid":"s:70", "leagues":[ { "name":"National Hockey League",
{
"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....
}......
我目前在函数中有一个do语句,试图循环遍历“teams”数组中的所有31个条目:
我知道我必须在“if let entries”这一行进行更深入的挖掘,但我似乎无法获得我想要的数据。提前感谢。首先,为什么这么多教程建议/人们使用
.mutableContainers
,尽管对象永远不会发生变异,而且讽刺的是,结果大多分配给im可变对象
不要那样做。通过省略参数不传递任何选项
第二,不要对抗斯威夫特强大的类型系统。使用本机集合类型Array
和Dictionary
,不要注释编译器可以推断的类型
为了方便起见,让我们创建一个类型别名:
typealias JSONDictionary = [String:Any]
if let parsedData = try JSONSerialization.jsonObject(with: data!) as? JSONDictionary,
键sports
的值是一个数组(由[]
表示)
枚举数组并获取键leagues
的值,该键也是一个数组
for sport in sports {
print("sport ", sport["name"] as? String ?? "n/a")
if let leagues = sport["leagues"] as? [JSONDictionary] {
对联盟进行同样的操作
并获得团队
for league in leagues {
print("league ", league["name"] as? String ?? "n/a")
if let teams = league["teams"] as? [JSONDictionary] {
for team in teams {
解析JSON非常简单,只有两种集合类型和四种值类型
}
}
}
}
}
}
提示:
parsedData[“sports”]
是一个数组,而不是字典。我只是稍微修改了一下代码。让条目行正常工作,但我无法深入到“运动”数组中的“联赛”数组中。不要使用Swift使用NSDictionary
和NSArray
。@CalebRudnicki如果这解决了您的问题,请将答案标记为正确
for league in leagues {
print("league ", league["name"] as? String ?? "n/a")
if let teams = league["teams"] as? [JSONDictionary] {
for team in teams {
}
}
}
}
}
}