如何使用 Alamofire 解析 Swift 3 中的 JSON?

How to Parse JSON in Swift 3 using Alamofire?

我正在使用 Swift 3。直到现在我还没有真正使用过 JSON。我面临这个问题,我只能在 query 之前解析数据。之后没有数据被解析。请帮助我知道我在这里做错了什么。

JSON代码:

{
  "batchcomplete": "",
  "continue": {
    "gpsoffset": 10,
    "continue": "gpsoffset||"
  },
  "query": {
    "pages": {
      "445066": {
        "pageid": 445066,
        "ns": 0,
        "title": "RoboCop",
        "index": 3,
        "thumbnail": {
          "source": "https://upload.wikimedia.org/wikipedia/en/thumb/1/16/RoboCop_%281987%29_theatrical_poster.jpg/32px-RoboCop_%281987%29_theatrical_poster.jpg",
          "width": 32,
          "height": 50
        }
      },
      "25781": {
        "pageid": 25781,
        "ns": 0,
        "title": "Robot",
        "index": 1,
        "thumbnail": {
          "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/HONDA_ASIMO.jpg/37px-HONDA_ASIMO.jpg",
          "width": 37,
          "height": 50
        }
      },
      "2629669": {
        "pageid": 2629669,
        "ns": 0,
        "title": "Robot-assisted surgery",
        "index": 8,
        "thumbnail": {
          "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Laproscopic_Surgery_Robot.jpg/34px-Laproscopic_Surgery_Robot.jpg",
          "width": 34,
          "height": 50
        }
      },
      "1527386": {
        "pageid": 1527386,
        "ns": 0,
        "title": "Robot Chicken",
        "index": 9
      },
      "364093": {
        "pageid": 364093,
        "ns": 0,
        "title": "Robot Wars (TV series)",
        "index": 2
      },
      "3977472": {
        "pageid": 3977472,
        "ns": 0,
        "title": "Robot competition",
        "index": 10
      },
      "26333": {
        "pageid": 26333,
        "ns": 0,
        "title": "Robotech",
        "index": 5,
        "thumbnail": {
          "source": "https://upload.wikimedia.org/wikipedia/en/thumb/9/99/RobotechTitle1985.jpg/50px-RobotechTitle1985.jpg",
          "width": 50,
          "height": 38
        }
      },
      "20903754": {
        "pageid": 20903754,
        "ns": 0,
        "title": "Robotics",
        "index": 4,
        "thumbnail": {
          "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Shadow_Hand_Bulb_large.jpg/33px-Shadow_Hand_Bulb_large.jpg",
          "width": 33,
          "height": 50
        }
      },
      "893808": {
        "pageid": 893808,
        "ns": 0,
        "title": "Robots (2005 film)",
        "index": 7
      },
      "101673": {
        "pageid": 101673,
        "ns": 0,
        "title": "Robots exclusion standard",
        "index": 6
      }
    }
  }
}

Swift代码:

 var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options:.mutableContainers) as? JSONStandard
        print(readableJSON)
            if let query = readableJSON?["query"] as? JSONStandard{

                print(query," Here!! ")

                if let pages = readableJSON?["pages"] as? [JSONStandard]{

                    print(pages," Check this! ")


                    for i in 0..<pages.count{

                        let page = pages[i]

                        let id = page ["id"] as! String

                        //titles.append(id)

                        self.tableView.reloadData()

                    }
                }
            }

正如您在块 pages 中看到的那样,每个新块的声明都没有任何标识符,那么我该如何调用该特定块?

pages 的值是字典,而不是数组,它派生自 query

请阅读JSON:[]是数组{}是字典。

并且没有键 id,它是 pageid,值是 Int(没有双引号)。

         if let pages = query["pages"] as? JSONStandard {
                print(pages," Check this! ")
                for (_, page) in pages {
                    let id = page ["pageid"] as! Int
                    print(id)
                    titles.append("\(id)")
                }
                self.tableView.reloadData() // don't reload the table view in the loop.
            }

或者 – 更简单 – 获取字典的键,它也是 id 数字(这里确实是 String

         if let pages = query["pages"] as? JSONStandard {
                print(pages," Check this! ")
                for (id, page) in pages {
                    print(id)
                    titles.append(id)
                }
                self.tableView.reloadData()
            }

请注意,字典始终是无序的。