gpt4 book ai didi

json - 解析 JSON Swift 3 字典

转载 作者:可可西里 更新时间:2023-11-01 02:01:27 24 4
gpt4 key购买 nike

我正在尝试通过此 JSON 链接获取 NHL 的所有 31 支球队。下面是该文件的外观:

{
"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 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 entries”这一行,但我似乎无法获得我想要的数据。提前致谢。

最佳答案

首先,为什么这么多教程建议/人们使用 .mutableContainers,尽管该对象永远不会发生变化,而且具有讽刺意味的是,结果主要分配给一个 im可变对象?

不要那样做。通过省略参数传递无选项

其次,不要对抗 Swift 的强类型系统。使用原生集合类型 ArrayDictionary 并且不要注释编译器可以推断的类型。

为方便起见,让我们创建一个类型别名:

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 非常简单,只有两种集合类型和四种值类型。

                }  
}
}
}
}
}

关于json - 解析 JSON Swift 3 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46010620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com