Swift 中的 JSON 处理:面向初学者的解析与序列化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift 中 JSON 处理简介

JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式,广泛应用于移动和 Web 开发。对于 Swift(iOS/macOS)的初学者开发者来说,掌握 JSON 处理是一项必备技能。在本文中,我们将介绍两种主要方法:经典的 JSONSerialization 和现代的 Codable 协议。您将学习如何从网络获取数据、解析数据,并将其转换回 JSON 以发送到服务器。

无论您是在开发天气应用、待办事项列表还是社交网络,JSON 都将是您的忠实伙伴。让我们从一个简单的示例开始,逐步过渡到更复杂的场景。



Swift 中的 JSON 基础:结构与数据类型

在编写代码之前,了解 JSON 的外观非常重要。在 Swift 中,JSON 以字典([String: Any])和数组([Any])的形式表示。JSON 中的基本数据类型包括:

  • 字符串 — 用双引号括起来("Hello")
  • 数字 — 整数和浮点数(42、3.14)
  • 布尔值 — true 或 false
  • 数组 — 有序的值列表([1, 2, 3])
  • 对象 — 无序的“键-值”对集合({"key": "value"})
  • null — 空值

在 Swift 中,使用内置的数据结构可以方便地表示 JSON。让我们看一个简单的 JSON 对象示例:

{  "name": "伊万",  "age": 25,  "isStudent": false,  "hobbies": ["阅读", "编程"]}

现在,让我们看看如何在 Swift 代码中处理这种格式。



使用 JSONSerialization 解析 JSON(经典方法)

在 Codable 协议出现之前,开发者使用 JSONSerialization 类。这种方法至今仍然适用,尤其是在 JSON 结构未知或非常动态的情况下。

基本解析示例

假设我们有一个 JSON 字符串,需要将其转换为 Swift 对象:

let jsonString = """{  "name": "玛丽亚",  "age": 30,  "isEmployed": true}"""

if let jsonData = jsonString.data(using: .utf8) { do { if let dictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] { let name = dictionary["name"] as? String ?? "未知" let age = dictionary["age"] as? Int ?? 0 let isEmployed = dictionary["isEmployed"] as? Bool ?? false print("姓名:\(name),年龄:\(age),在职:\(isEmployed)") } } catch { print("JSON 解析错误:\(error.localizedDescription)") }}

请注意:获取字典后,我们需要显式地将每个元素转换为所需的类型。当字段数量较多时,这可能不太方便。



处理 JSON 中的数组

JSON 经常包含对象数组。让我们看一个用户数组的示例:

let jsonArrayString = """[  {"name": "安娜", "age": 22},  {"name": "彼得", "age": 28}]"""

if let data = jsonArrayString.data(using: .utf8) { do { if let users = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] { for user in users { let name = user["name"] as? String ?? "" let age = user["age"] as? Int ?? 0 print("\(name):\(age) 岁") } } } catch { print("错误:\(error)") }}

JSONSerialization 方法很简单,但需要大量手动类型转换。对于现代项目,Apple 推荐使用 Codable。



博客

书籍推荐