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

在SwiftUI中如何从JSON数组中提取特定嵌套数据块?

实现思路

你要的效果用系统自带的API就能实现,不需要引入第三方库,整体分3步走:先定义和JSON结构匹配的Codable数据模型,再解析JSON数据,最后把需要的嵌套字段绑定到SwiftUI视图上展示即可。

具体实现步骤
  • 第一步:定义和JSON结构匹配的数据模型
    举个示例,假设你的JSON是带嵌套地址的用户数据:
{
  "user_id": 123,
  "username": "张三",
  "delivery_address": {
    "city": "北京",
    "street": "中关村大街1号",
    "postcode": "100080"
  }
}

对应定义Swift模型,系统的Codable协议可以直接完成JSON到Swift对象的映射:

// 嵌套的地址子模型
struct Address: Codable {
    let city: String
    let street: String
    let postcode: String
}

// 顶层数据模型
struct User: Codable {
    let userId: Int
    let username: String
    let deliveryAddress: Address
}

如果你的JSON字段都是蛇形命名(比如user_id这种),可以在解析时设置keyDecodingStrategy = .convertFromSnakeCase,不需要手动写CodingKeys做映射,更省事。

  • 第二步:解析JSON数据
    先把你的JSON文件拖入Xcode项目,记得勾选 Copy items if needed 和你的APP target。然后给Bundle加个扩展用于通用解析:
extension Bundle {
    func parseJSON<T: Codable>(fileName: String) -> T {
        guard let fileUrl = url(forResource: fileName, withExtension: nil),
              let jsonData = try? Data(contentsOf: fileUrl),
              let result = try? JSONDecoder().decode(T.self, from: jsonData) else {
            fatalError("JSON解析失败,请检查文件名、结构是否和模型匹配")
        }
        return result
    }
}

需要解析的时候直接调用即可,比如你的JSON文件叫user_data.json:

let user: User = Bundle.main.parseJSON(fileName: "user_data.json")
  • 第三步:在SwiftUI视图中展示指定嵌套数据
    直接访问嵌套属性就能拿到你要的特定数据块,示例视图代码:
struct ContentView: View {
    // 提前解析好的JSON数据
    let user: User = Bundle.main.parseJSON(fileName: "user_data.json")
    
    var body: some View {
        VStack(alignment: .leading, spacing: 12) {
            Text("用户名:\(user.username)")
                .font(.headline)
            
            // 展示你需要的嵌套地址块
            Group {
                Text("收货地址:")
                    .font(.subheadline)
                    .fontWeight(.medium)
                Text(user.deliveryAddress.city)
                Text(user.deliveryAddress.street)
                Text("邮编:\(user.deliveryAddress.postcode)")
            }
            .padding(.leading, 12)
        }
        .padding()
    }
}
新手常见问题说明
  • 如果需要提取多个同类嵌套数据块,可以把需要的字段筛选后存入数组,用ForEach遍历生成列表视图即可。
  • 如果JSON里的字段可能为空,把模型中对应属性定义为可选类型(比如let postcode: String?)即可避免解析报错。
  • 不需要引入第三方JSON解析库,系统自带的Codable能力完全覆盖常规需求,学习成本更低。

内容的提问来源于stack exchange,提问作者Rene Robles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:54:03