14 解析网络请求中的JSON数据

在前一篇文章中,我们深入探讨了如何使用 URLSession 进行网络请求。这一篇将接着这个主题,专注于如何解析从网络请求返回的 JSON 数据。掌握 JSON 解析对于处理 API 返回的数据至关重要,特别是在 iOS 开发中,常常需要与后端进行交互,将数据转换为应用程序可用的格式。

JSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。在 iOS 开发中,使用 JSON 是非常普遍的,尤其是在进行网络请求后处理数据时。

JSON示例

以下是一个典型的 JSON 数据示例:

1
2
3
4
5
{
"id": 1,
"title": "Hello, World!",
"completed": false
}

解析JSON的步骤

解析 JSON 数据通常包括以下几个步骤:

  1. 发起网络请求,获取 JSON 数据(这一部分在前一篇已讲解)。
  2. 将获取的数据转换为 Swift 可用的对象
  3. 处理解析过程中可能出现的错误

解析JSON的实现

下面我们将通过一个实例,详细展示如何完成这一过程。

步骤1: 发起网络请求

首先,我们需要使用 URLSession 发起一个请求,并在完成后解析 JSON。假设我们有一个 API 地址返回的 JSON 为上面的示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let urlString = "https://jsonplaceholder.typicode.com/todos/1"
guard let url = URL(string: urlString) else { return }

let task = URLSession.shared.dataTask(with: url) { data, response, error in
// 处理错误
if let error = error {
print("Error: \(error.localizedDescription)")
return
}

// 确保数据不为空
guard let data = data else { return }

// 解析JSON
self.parseJSON(data)
}
task.resume()

步骤2: 解析JSON

接下来,我们需要将从网络请求得到的数据传递给一个 parseJSON 方法进行解析:

1
2
3
4
5
6
7
8
9
10
11
func parseJSON(_ data: Data) {
let decoder = JSONDecoder()

do {
// 解码JSON数据到模型
let todoItem = try decoder.decode(TodoItem.self, from: data)
print("ID: \(todoItem.id), Title: \(todoItem.title), Completed: \(todoItem.completed)")
} catch {
print("JSON parsing error: \(error.localizedDescription)")
}
}

步骤3: 定义模型

为了能够有效解码 JSON 数据,我们需要定义一个与 JSON 结构相对应的 Swift 模型:

1
2
3
4
5
struct TodoItem: Codable {
let id: Int
let title: String
let completed: Bool
}

在这里,我们使用了 Codable 协议,它是 EncodableDecodable 的组合,允许我们轻松地进行编码和解码。

完整代码示例

将以上代码整合在一起,你可以得到一个完整的 JSON 解析示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import Foundation

struct TodoItem: Codable {
let id: Int
let title: String
let completed: Bool
}

func fetchTodoItem() {
let urlString = "https://jsonplaceholder.typicode.com/todos/1"
guard let url = URL(string: urlString) else { return }

let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
print("Error: \(error.localizedDescription)")
return
}

guard let data = data else { return }

self.parseJSON(data)
}
task.resume()
}

func parseJSON(_ data: Data) {
let decoder = JSONDecoder()

do {
let todoItem = try decoder.decode(TodoItem.self, from: data)
print("ID: \(todoItem.id), Title: \(todoItem.title), Completed: \(todoItem.completed)")
} catch {
print("JSON parsing error: \(error.localizedDescription)")
}
}

// 调用 fetchTodoItem 函数开始请求
fetchTodoItem()

小结

在本篇文章中,我们介绍了如何从网络请求中获取 JSON 数据,并将其解析为 Swift 可用的对象。理解如何进行 JSON 解析是 iOS 开发中的重要技能。下篇文章将聚焦于如何处理网络请求中可能出现的错误,包括状态码和解析错误等。这将帮助我们编写更健壮的网络请求代码。

14 解析网络请求中的JSON数据

https://zglg.work/ios-app-dev/14/

作者

IT教程网(郭震)

发布于

2024-08-14

更新于

2024-08-15

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论