You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何从JSON字符串获取键值?含username提取示例

在Swift中解析JSON获取username值的方法

嘿,我来帮你搞定这个Swift解析JSON的问题!针对你给出的JSON结构,我平时做开发时常用两种方法来提取username值,一种适合简单场景的手动解析,另一种是更推荐的类型安全解析方式,我都给你详细演示一下:

方法一:手动解析(JSONSerialization)

这种方法不需要定义额外模型,直接逐层解析字典,适合结构简单的JSON:

let jsonString = """
{ "user":{ "id":"74d93200-2ed2-437c-976f-83710eaea923","firstName":"dev","lastName":"che", "username":"dev_che"}}
"""

// 1. 把JSON字符串转成Data类型(JSONSerialization的输入要求)
guard let jsonData = jsonString.data(using: .utf8) else {
    print("无法将字符串转换为Data")
    return
}

do {
    // 2. 将Data解析为字典类型
    guard let jsonDict = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] else {
        print("JSON格式不符合预期")
        return
    }
    
    // 3. 逐层取出user字典,再提取username
    guard let userDict = jsonDict["user"] as? [String: Any],
          let username = userDict["username"] as? String else {
        print("无法找到或解析username字段")
        return
    }
    
    print("获取到的username:\(username)") // 输出: 获取到的username:dev_che
} catch {
    print("解析失败:\(error.localizedDescription)")
}

这种方法的优点是快速上手,不需要额外定义模型;缺点是需要手动处理所有类型转换,容易因强制解包或类型不匹配导致崩溃,适合临时处理简单JSON的场景。

方法二:使用Codable协议(推荐)

Codable是Swift自带的类型安全编码/解码协议,能让你通过定义模型结构体来和JSON结构映射,代码更易维护,出错时也能快速定位问题:

首先定义和JSON结构对应的模型:

// 对应外层的JSON结构(包含user字段)
struct UserResponse: Codable {
    let user: User
}

// 对应用户信息的详细结构
struct User: Codable {
    let id: String
    let firstName: String
    let lastName: String
    let username: String
}

然后用JSONDecoder进行解码:

let jsonString = """
{ "user":{ "id":"74d93200-2ed2-437c-976f-83710eaea923","firstName":"dev","lastName":"che", "username":"dev_che"}}
"""

guard let jsonData = jsonString.data(using: .utf8) else {
    print("无法将字符串转换为Data")
    return
}

do {
    // 解码JSON到模型对象
    let userResponse = try JSONDecoder().decode(UserResponse.self, from: jsonData)
    let username = userResponse.user.username
    print("获取到的username:\(username)") // 输出: 获取到的username:dev_che
} catch {
    print("解码失败:\(error.localizedDescription)")
}

这种方法的优势在于类型安全——编译器会帮你检查模型和JSON字段是否匹配,一旦JSON结构变动,编译阶段就能发现问题;同时代码更简洁,适合长期维护或复杂JSON的场景。如果JSON中的键名和Swift属性名不一致,还可以通过CodingKeys枚举来做映射。

内容的提问来源于stack exchange,提问作者Mahalakshmi Saravanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:52:49