Swift 中对象的自动 JSON 序列化和反序列化

作者:编程家 分类: swift 时间:2025-07-31

在Swift中,我们经常需要将对象转换为JSON格式,或者将JSON格式的数据转换为对象。为了简化这个过程,Swift提供了自动的JSON序列化和反序列化功能。这使得我们可以轻松地在Swift中进行对象的存储和传输。

JSON序列化

在Swift中,我们可以使用Codable协议来实现对象的JSON序列化。Codable是一个组合协议,它同时遵循Encodable和Decodable协议。Encodable协议定义了将对象编码为JSON数据的方法,而Decodable协议定义了将JSON数据解码为对象的方法。

让我们以一个简单的例子来说明如何使用Codable协议进行JSON序列化。假设我们有一个Person类,它有两个属性:name和age。我们希望将一个Person对象转换为JSON格式的数据。

swift

struct Person: Codable {

var name: String

var age: Int

}

let person = Person(name: "John", age: 30)

let encoder = JSONEncoder()

if let jsonData = try? encoder.encode(person) {

if let jsonString = String(data: jsonData, encoding: .utf8) {

print(jsonString)

// 输出:{"name":"John","age":30}

}

}

在这个例子中,我们首先定义了一个Person结构体,并让它遵循Codable协议。然后,我们创建了一个Person对象,并使用JSONEncoder将其转换为JSON格式的数据。最后,我们将JSON数据转换为字符串,并打印出来。

JSON反序列化

除了将对象转换为JSON格式的数据,我们还经常需要将JSON格式的数据转换为对象。在Swift中,我们可以使用Codable协议来实现JSON反序列化。

让我们以一个例子来说明如何使用Codable协议进行JSON反序列化。假设我们有一个JSON格式的字符串,表示一个Person对象的数据。

swift

let jsonString = "{\"name\":\"John\",\"age\":30}"

let decoder = JSONDecoder()

if let jsonData = jsonString.data(using: .utf8) {

if let person = try? decoder.decode(Person.self, from: jsonData) {

print(person)

// 输出:Person(name: "John", age: 30)

}

}

在这个例子中,我们首先定义了一个JSON格式的字符串,表示一个Person对象的数据。然后,我们创建了一个JSONDecoder对象,并使用它将JSON数据解码为Person对象。

自定义JSON键

有时候,我们希望使用不同于属性名称的键来表示JSON数据。在Swift中,我们可以使用CodingKeys枚举来实现这一点。

swift

struct Person: Codable {

var name: String

var age: Int

enum CodingKeys: String, CodingKey {

case name = "personName"

case age = "personAge"

}

}

let person = Person(name: "John", age: 30)

let encoder = JSONEncoder()

encoder.keyEncodingStrategy = .convertToSnakeCase

if let jsonData = try? encoder.encode(person) {

if let jsonString = String(data: jsonData, encoding: .utf8) {

print(jsonString)

// 输出:{"person_name":"John","person_age":30}

}

}

在这个例子中,我们定义了一个Person结构体,并在其中定义了一个CodingKeys枚举。我们使用CodingKeys枚举来指定name属性对应的JSON键为"personName",age属性对应的JSON键为"personAge"。然后,我们创建了一个Person对象,并使用JSONEncoder将其转换为JSON格式的数据。最后,我们将JSON数据转换为字符串,并打印出来。

Swift中的自动JSON序列化和反序列化功能使得我们可以轻松地在Swift中进行对象的存储和传输。通过遵循Codable协议,我们可以实现对象的JSON序列化和反序列化。我们还可以使用CodingKeys枚举来自定义JSON键。这些功能使得处理JSON数据变得简单而方便。无论是将对象转换为JSON格式的数据,还是将JSON格式的数据转换为对象,Swift都提供了简单而强大的工具来帮助我们完成这些任务。