繁体   English   中英

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

[英]How to Parse JSON in Swift 3 using Alamofire?

我正在使用Swift3。到目前为止,我实际上还没有使用过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()
            }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM