Skip to content

处理嵌套JSON对象

在处理嵌套JSON对象时,首先需要理解JSON的结构。嵌套JSON通常包含多个层级的数据,每个层级可以是对象或数组。为了有效地解码这些数据,我们需要定义符合Codable协议的数据结构。

定义数据模型

  1. 创建结构体:首先,定义一个结构体来表示最外层的JSON对象。例如,如果你的JSON数据如下:

    json
    {
        "user": {
            "id": 1,
            "name": "张三",
            "address": {
                "city": "北京",
                "zip": "100000"
            }
        }
    }

    你可以定义如下结构体:

    swift
    struct User: Codable {
        let id: Int
        let name: String
        let address: Address
    }
    
    struct Address: Codable {
        let city: String
        let zip: String
    }
  2. 嵌套结构:在User结构体中,address属性是一个Address类型,这样就形成了嵌套关系。

解码JSON数据

使用JSONDecoder来解码嵌套的JSON对象。以下是解码的示例代码:

swift
let jsonData = """
{
    "user": {
        "id": 1,
        "name": "张三",
        "address": {
            "city": "北京",
            "zip": "100000"
        }
    }
}
""".data(using: .utf8)!

struct Response: Codable {
    let user: User
}

do {
    let response = try JSONDecoder().decode(Response.self, from: jsonData)
    print("用户ID: \(response.user.id), 姓名: \(response.user.name), 城市: \(response.user.address.city)")
} catch {
    print("解码失败: \(error)")
}

处理JSON数组

如果JSON中包含数组,例如:

json
{
    "users": [
        {
            "id": 1,
            "name": "张三"
        },
        {
            "id": 2,
            "name": "李四"
        }
    ]
}

你可以定义如下结构体:

swift
struct UsersResponse: Codable {
    let users: [User]
}

然后使用相同的解码方法:

swift
let jsonData = """
{
    "users": [
        {
            "id": 1,
            "name": "张三"
        },
        {
            "id": 2,
            "name": "李四"
        }
    ]
}
""".data(using: .utf8)!

do {
    let response = try JSONDecoder().decode(UsersResponse.self, from: jsonData)
    for user in response.users {
        print("用户ID: \(user.id), 姓名: \(user.name)")
    }
} catch {
    print("解码失败: \(error)")
}

小结

处理嵌套JSON对象的关键在于定义合适的数据模型,并使用JSONDecoder进行解码。通过这种方式,你可以轻松地访问嵌套数据,提升你的SwiftUI应用的网络请求能力。💪✨

本站使用 VitePress 制作