json - 解析 JSON Swift 3 字典

标签 json swift parsing dictionary swift3

我正在尝试从此 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 letentries”行上更深入地挖掘,但我似乎无法获得我想要的数据。提前致谢。

最佳答案

首先,为什么这么多教程建议/人们使用 .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] {

联赛执行相同操作并获取团队

             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/

相关文章:

ios - Json 响应给出了错误的数据

java - 如何在 Java 中解析 JSON

swift - 访问常量类中的枚举时,Swift 中出现编译错误

swift - xcode/swift 标签和 TextView 中的行间距

ios - 使用 Swift 3 解析 JSON 响应

windows - 如何在批处理文件中用空格分隔嵌入空格的双引号字符串?

python - SQLAlchemy中,dict更新方法如何与ORM交互?

c# - Json.NET JsonConvert.DeserializeObject() 返回空值

java - 安卓:Java代码输出 "NaN"

parsing - 批量验证 yaml 文件