Swift - 从JSON响应中形成一个数组

时间:2017-11-16 00:22:33

标签: ios json swift get

我是JSON世界的新手。我刚开始使用Swift中的JSON。

现在,我有以下功能:

func forShow() {
    // Using ACORN API to fetch the course codes

    guard let url[enter image description here][1]Online = URL(string: "https://timetable.iit.artsci.utoronto.ca/api/20179/courses?code=CSC") else { return }
    let session = URLSession.shared
    session.dataTask(with: urlOnline) { (data, response, error) in
        if let response = response {
            print(response)
        }
        if let data = data {
            print(data)
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)
                print(json)
            } catch {
                print(error)
            }
        }
        }.resume()
}

我得到的回复是所有课程都有CSC'在他们的代码String中。我想根据响应形成一个包含所有完整课程代码的数组。我将在此处粘贴一门课程的回复:

enter image description here

所以,我想访问图片中看到的所有课程代码。它" CSC104H1-F-20179"我希望能够访问。

2 个答案:

答案 0 :(得分:0)

要尝试基于以下简单示例实现这个想法,并使用JSON关于雇员:

<强> JSON

[
    {
        "fio": "Some Awesome Person with Name",
        "phoneNumber": "9438957934",
        "division": "One Department",
        "position": "A craftman"
    },
    {
        "fio": "Other Awesome Person with Name",
        "phoneNumber": "2438947985",
        "division": "Different Department",
        "position": "A president"
    }
]

处理在Swift中解析JSON的经典方法

guard let personsJSON = try JSONSerialization.jsonObject(with: someDataFromServer, options: [.allowFragments]) as? [[String: Any]] else {
    fatalError()
}

for person in personsJSON {
    guard let personFullName = person["fio"] as? String else {
        fatalError()
    }
    guard let phoneNumber = person["phoneNumber"] as? Int else {
        fatalError()
    }
    guard let jobDepartment = person["division"] as? String else {
        fatalError()
    }
    guard let jobDescription = person["position"] as? String else {
        fatalError()
    }

}

当然,您可以使用Swift的guard else代替optional chaining语句,或者您认为在您看来更优选的任何原因。

来自服务器的任何有效JSON都是iOS环境中的Foundation的字典。所以,如果你在JSON中加入方括号[],你将处理如下的字典数组:

[[SomeFoundationType1: SomeFoundationType2]]

否则你将处理诅咒括号{},这就像一个简单的基金会字典:

[SomeFoundationType1: SomeFoundationType2]

答案 1 :(得分:0)

将您的JSON视为字典。您拥有顶级的所有课程名称,所以幸运的是,您不必深入挖掘层次结构。

所以,你在哪里:
let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) print(json)

更改为:
if let arrayOfCourses = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [[String: Any]] { for (course, _) in arrayOfCourses { print(course) } }