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

Swift解析以数组开头的JSON:如何定义初始结构体?

解决直接以数组开头的JSON解码问题

嘿,这个场景我太熟悉了!其实根本不需要额外定义带外层键的结构体——因为你的JSON本身就是一个数组,直接解码成[Item]类型的数组就行,完全适配你已经定义好的Item: Codable结构体。

具体做法:

  • 直接使用JSONDecoder解码为[Item].self,而不是自定义的外层结构体。

举个完整的代码例子:

// 你已经定义好的Item结构体
struct Item: Codable {
    let userId: Int
    let id: Int
    let title: String
}

// 解码逻辑
let jsonData = """
[{"userId":1,"id":1,"title":"TEST text"},{"userId":2,"id":2,"title":"Another test"}]
""".data(using: .utf8)!

do {
    let items = try JSONDecoder().decode([Item].self, from: jsonData)
    // 现在items就是包含所有Item实例的数组了
    print(items)
} catch {
    print("解码失败:\(error)")
}

为什么不用外层结构体?

因为你的JSON根元素是数组,而Swift的Array本身就遵循Codable协议(只要数组里的元素遵循),所以直接解码成数组类型是最直接、最简洁的方案,完全没必要多套一层data键的结构体。

当然,如果出于某种需求(比如统一项目里的解码结构)一定要用结构体包裹,也可以这么定义,但其实有点画蛇添足:

struct ItemResponse: Codable {
    let items: [Item]
}
// 但这时候你需要修改JSON,给数组套上"items"键,显然不符合你的原始JSON结构,所以不推荐

总之,直接解码成[Item]就是最适配你当前JSON结构的解法~

内容的提问来源于stack exchange,提问作者Mike T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:38