Swift - 从 JSON 响应创建数据模型

swiftJS

1个回答

写回答

二度未央

2025-06-26 23:30

+ 关注

Swift
Swift

使用 SwiftJSON 响应创建数据模型是一种常见的任务,它可以帮助我们将服务端返回的数据转化为可用的对象。在本文中,我们将学习如何使用 Swift 的 Codable 协议来实现这一功能,并通过案例代码来详细说明。

首先,我们需要了解什么是 JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输。它使用键值对的方式来表示数据,并支持数组和嵌套对象的结构。

Swift 中,我们可以使用 Codable 协议来将 JSON 数据转化为 Swift 对象。Codable 是一个组合协议,由 Encodable 和 Decodable 两个协议组成。Encodable 用于将对象编码为 JSON 数据,而 Decodable 用于将 JSON 数据解码为对象。

下面是一个简单的示例,展示了如何使用 Codable 协议从 JSON 数据创建数据模型。假设我们有一个服务端返回的 JSON 数据如下:

{

"name": "John",

"age": 30,

"emAIl": "john@example.com"

}

我们可以定义一个名为 Person 的数据模型,并使用 Codable 协议进行编码和解码:

Swift

struct Person: Codable {

let name: String

let age: Int

let emAIl: String

}

使用 Codable 协议后,我们可以通过 JSONDecoder 来将 JSON 数据解码为 Person 对象:

Swift

let JSon = """

{

"name": "John",

"age": 30,

"emAIl": "john@example.com"

}

""".data(using: .utf8)!

do {

let person = try JSONDecoder().decode(Person.self, from: JSon)

print(person.name) // 输出 "John"

print(person.age) // 输出 30

print(person.emAIl) // 输出 "john@example.com"

} catch {

print("解码失败:\(error)")

}

上述代码中,我们首先将 JSON 数据转化为 Data 对象,并使用 JSONDecoder 的 decode 方法将其解码为 Person 对象。如果解码成功,我们可以直接访问 Person 对象的属性。

在上述示例中,我们没有涉及到复杂的嵌套对象或数组。但是,使用 Codable 协议也同样适用于处理这些情况。只需要在数据模型中定义对应的属性即可。

处理嵌套对象

如果 JSON 数据中包含嵌套对象,我们可以在数据模型中定义另一个遵循 Codable 协议的结构体或类。例如,我们有一个包含订单信息的 JSON 数据:

JSon

{

"id": 1,

"customer": {

"name": "John",

"emAIl": "john@example.com"

},

"products": [

{

"name": "iphone",

"price": 999

},

{

"name": "iPad",

"price": 799

}

]

}

我们可以定义两个数据模型,一个是 Customer,另一个是 Product:

Swift

struct Customer: Codable {

let name: String

let emAIl: String

}

struct Product: Codable {

let name: String

let price: Int

}

struct Order: Codable {

let id: Int

let customer: Customer

let products: [Product]

}

使用上述定义的数据模型,我们可以将 JSON 数据解码为 Order 对象:

Swift

let JSon = """

{

"id": 1,

"customer": {

"name": "John",

"emAIl": "john@example.com"

},

"products": [

{

"name": "iphone",

"price": 999

},

{

"name": "iPad",

"price": 799

}

]

}

""".data(using: .utf8)!

do {

let order = try JSONDecoder().decode(Order.self, from: JSon)

print(order.id) // 输出 1

print(order.customer.name) // 输出 "John"

print(order.customer.emAIl) // 输出 "john@example.com"

print(order.products[0].name) // 输出 "iphone"

print(order.products[0].price) // 输出 999

} catch {

print("解码失败:\(error)")

}

处理数组

如果 JSON 数据中包含数组,我们可以在数据模型中定义一个数组属性。例如,我们有一个包含多个学生信息的 JSON 数据:

JSon

{

"students": [

{

"name": "John",

"age": 20

},

{

"name": "Jane",

"age": 22

}

]

}

我们可以定义一个名为 Student 的数据模型,并在外部定义一个包含 Student 对象的数组:

Swift

struct Student: Codable {

let name: String

let age: Int

}

struct StudentData: Codable {

let students: [Student]

}

使用上述定义的数据模型,我们可以将 JSON 数据解码为 StudentData 对象:

Swift

let JSon = """

{

"students": [

{

"name": "John",

"age": 20

},

{

"name": "Jane",

"age": 22

}

]

}

""".data(using: .utf8)!

do {

let studentData = try JSONDecoder().decode(StudentData.self, from: JSon)

print(studentData.students[0].name) // 输出 "John"

print(studentData.students[0].age) // 输出 20

print(studentData.students[1].name) // 输出 "Jane"

print(studentData.students[1].age) // 输出 22

} catch {

print("解码失败:\(error)")

}

使用 Swift 的 Codable 协议,我们可以轻松地从 JSON 响应创建数据模型。无论是处理简单的对象还是复杂的嵌套结构,Codable 协议都能够提供便捷的解析方式。通过以上案例代码的学习,相信读者已经对如何使用 SwiftJSON 响应创建数据模型有了更深入的理解。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号