Swift Json实例详细解析
在 Swift 中,使用 JSON 数据是很常见的操作之一。本篇文章将带领大家学习如何在 Swift 中处理 JSON 数据。
1. 获取 JSON 数据
通常情况下,我们需要将服务端返回的 JSON 数据进行处理和解析,以方便在客户端呈现。我们可以使用 URLSession、Alamofire、SwiftyJSON 等工具获取 JSON 数据。
在使用 URLSession 获取 JSON 数据的情况下,我们可以使用以下代码:
let url = URL(string: "http://jsonplaceholder.typicode.com/posts/1")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error.localizedDescription)
return
}
guard let data = data else {
print("Data is empty")
return
}
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
} catch {
print(error.localizedDescription)
}
}
task.resume()
在上述代码中,我们使用了 URLSession 来获取 JSON 数据。 URLSession 会将获取到的数据存储在一个名为 data 的变量中,而我们需要使用 JSONSerialization 类来将其解析成可读的 JSON 对象。
2. 解析 JSON 数据
在获取到 JSON 数据之后,我们需要对其进行解析,以便能够操作其中的具体内容。在 Swift 中,解析 JSON 数据可以使用 Codable 协议或者 JSONSerialization 类。
2.1 使用 Codable 协议解析 JSON 数据
Codable 协议是 Swift 4 推出的新特性,它可以帮助我们将 JSON 数据转换成 Codable 类型的对象。下面是一个使用 Codable 协议解析 JSON 数据的示例:
struct Post: Codable {
let userId: Int
let id: Int
let title: String
let body: String
}
let url = URL(string: "http://jsonplaceholder.typicode.com/posts/1")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error.localizedDescription)
return
}
guard let data = data else {
print("Data is empty")
return
}
do {
let decoder = JSONDecoder()
let post = try decoder.decode(Post.self, from: data)
print(post.title)
} catch {
print(error.localizedDescription)
}
}
task.resume()
在上述代码中,我们定义了一个 Post 结构体并遵循了 Codable 协议。随后,我们使用 URLSession 来获取 JSON 数据,并使用 JSONDecoder 类将其解析为 Post 对象。我们可以在 post 变量中获取到 JSON 数据的具体内容,如 title 属性值。
2.2 使用 JSONSerialization 解析 JSON 数据
在 Swift 4 之前,我们使用 JSONSerialization 类将 JSON 数据转换为 NSDictionary 或 NSArray 对象,如下所示。
let url = URL(string: "http://jsonplaceholder.typicode.com/posts/1")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error.localizedDescription)
return
}
guard let data = data else {
print("Data is empty")
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] {
let title = json["title"] as? String ?? ""
print(title)
}
} catch {
print(error.localizedDescription)
}
}
task.resume()
在上述代码中,我们使用 JSONSerialization 类将 JSON 数据解析成了一个名为 json 的 NSDictionary 对象。随后,我们可以通过键值名来获取 JSON 数据的具体内容。
3. 处理 JSON 数据
在获取和解析了 JSON 数据之后,我们可以将其显示在 UI 页面上,或存储到本地数据库中。下面是两个使用 JSON 数据的示例:
3.1 使用 JSON 数据填充 UITableView
let url = URL(string: "http://jsonplaceholder.typicode.com/posts")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error.localizedDescription)
return
}
guard let data = data else {
print("Data is empty")
return
}
do {
let decoder = JSONDecoder()
let posts = try decoder.decode([Post].self, from: data)
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print(error.localizedDescription)
}
}
task.resume()
在上述代码中,我们使用 Post 结构体存储获取的 JSON 数据,随后在 tableView 的代理方法中将其展示出来。
3.2 将 JSON 数据存储到本地数据库中
let url = URL(string: "http://jsonplaceholder.typicode.com/posts/1")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error.localizedDescription)
return
}
guard let data = data else {
print("Data is empty")
return
}
do {
let decoder = JSONDecoder()
let post = try decoder.decode(Post.self, from: data)
let realm = try! Realm()
try! realm.write {
realm.add(post)
}
} catch {
print(error.localizedDescription)
}
}
task.resume()
在上述代码中,我们使用 Post 结构体存储获取的 JSON 数据,并使用 Realm 数据库将其存储到本地数据库中。
4. 总结
在 Swift 中,使用 JSON 数据是非常常见的操作。我们可以使用 URLSession、Alamofire、SwiftyJSON 等工具获取 JSON 数据,并使用 Codable 协议或 JSONSerialization 类解析 JSON 数据。对于处理 JSON 数据,我们可以将其显示在 UI 页面上,或存储到本地数据库中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Swift Json实例详细解析 - Python技术站