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。