Skip to content

10.3 处理JSON中的嵌套对象和数组

处理JSON中的嵌套对象

JSON 数据经常包含嵌套的对象和数组,这使得数据结构更加复杂但也更具表达力。在 iOS 开发中,使用 Codable 协议处理这些复杂结构时,你需要定义相应的 Swift 模型来映射 JSON 的结构。让我们一起看看如何操作!🎉

嵌套对象处理

当 JSON 中包含嵌套对象时,你需要在 Swift 模型中定义相应的嵌套结构。例如,如果 JSON 包含一个 address 对象,而 address 对象又包含 streetcity 字段,你可以这样定义:

swift
struct User: Decodable {
    let name: String
    let age: Int
    let address: Address
}

struct Address: Decodable {
    let street: String
    let city: String
}

这样,User 模型就包含了 Address 类型的属性,可以轻松解析嵌套的地址信息。是不是很简单?😎

数组处理

JSON 数组的处理同样直观。如果 JSON 包含一个 hobbies 数组,你可以使用 Swift 的数组类型来映射它:

swift
struct User: Decodable {
    let name: String
    let age: Int
    let hobbies: [String]
}

在这个例子中,hobbies 属性是一个字符串数组,可以直接映射 JSON 中的数组数据。

嵌套对象和数组的组合

更复杂的情况是,JSON 中可能同时包含嵌套的对象和数组。例如,一个用户可能有多个地址,每个地址包含街道和城市信息。你可以这样定义模型:

swift
struct User: Decodable {
    let name: String
    let age: Int
    let addresses: [Address]
}

struct Address: Decodable {
    let street: String
    let city: String
}

这里,User 模型包含一个 Address 类型的数组,可以处理多个地址信息。

实际案例

假设你有以下 JSON 数据:

json
{
    "name": "张三",
    "age": 30,
    "addresses": [
        {
            "street": "长安街",
            "city": "北京"
        },
        {
            "street": "南京路",
            "city": "上海"
        }
    ],
    "hobbies": ["游泳", "跑步"]
}

你可以使用以下代码解析它:

swift
struct User: Decodable {
    let name: String
    let age: Int
    let addresses: [Address]
    let hobbies: [String]
}

struct Address: Decodable {
    let street: String
    let city: String
}

let jsonData = """
{
    "name": "张三",
    "age": 30,
    "addresses": [
        {
            "street": "长安街",
            "city": "北京"
        },
        {
            "street": "南京路",
            "city": "上海"
        }
    ],
    "hobbies": ["游泳", "跑步"]
}
""".data(using: .utf8)!

let decoder = JSONDecoder()
do {
    let user = try decoder.decode(User.self, from: jsonData)
    print("姓名: \(user.name), 年龄: \(user.age)")
    for address in user.addresses {
        print("街道: \(address.street), 城市: \(address.city)")
    }
    print("爱好: \(user.hobbies)")
} catch {
    print("解析错误: \(error)")
}

通过定义合适的模型,你可以轻松地处理 JSON 中复杂的嵌套结构。记住,清晰的模型定义是成功解析 JSON 数据的关键!🚀

总结

处理 JSON 中的嵌套对象和数组,关键在于定义与 JSON 结构相匹配的 Swift 模型。通过嵌套结构和数组类型,你可以轻松地映射和解析复杂的数据。希望这些例子能帮助你更好地理解和应用 Codable 协议!👍

本站使用 VitePress 制作