我是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中。我想根据响应形成一个包含所有完整课程代码的数组。我将在此处粘贴一门课程的回复:
所以,我想访问图片中看到的所有课程代码。它" CSC104H1-F-20179"我希望能够访问。
答案 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)
}
}