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

SwiftUI出现Value of type '[Tickets]' has no member 'open_tickets'错误如何解决

问题原因

错误的核心是RootO结构体的字段类型和JSON结构不匹配:
你给出的JSON中根节点下的tickets是对象类型,内部包含open_tickets、closed_tickets两个子字段,但你在定义RootO时把tickets声明为了[Tickets](Tickets数组类型)。数组类型本身没有open_tickets成员,只有单个Tickets类型才有该属性,所以编译时会抛出对应错误。

此外还有一个隐藏的解析错误:你定义的Open_Tickets结构体只声明了ticket_number字段,但实际JSON里open_tickets的元素不存在该字段,只包含uuid、package等字段,类型不对齐会导致后续运行时解析失败。

修复方案

按照JSON结构修正所有Codable结构体的定义即可,修改后的完整代码如下:

public class FetcherL: ObservableObject {
    @Published var ticket = [Open_Tickets]()
    init(){
        load()
    }
    func load() {
        let url = URL(string: "HTTPS://xxxxxxx")
        var request = URLRequest(url: url!)
        URLSession.shared.dataTask(with: request) {(data,response,error) in
            do {
                if let d = data {
                    let res = try JSONDecoder().decode(RootO.self, from: d)
                    DispatchQueue.main.async {
                        // 现在tickets是对象类型,可以直接调用open_tickets
                        self.ticket = res.tickets.open_tickets
                    }
                }else {
                    print("No Data")
                }
            } catch {
                print (error)
            }
        }.resume()
    }
}

// 修正RootO的tickets类型,从数组改成单个Tickets对象
struct RootO: Codable {
    let status: String
    let tickets: Tickets
    enum CodingKeys: String, CodingKey {
        case status, tickets
    }
}

struct Tickets: Codable {
    let open_tickets: [Open_Tickets]
    let closed_tickets: [Open_Tickets] // 可选补全closed_tickets字段
    enum CodingKeys: String, CodingKey {
        case open_tickets, closed_tickets
    }
}

// 修正Open_Tickets字段,和JSON结构对齐
struct Open_Tickets: Codable{
    let uuid: String
    let package: TicketPackage
    enum CodingKeys: String, CodingKey {
        case uuid, package
    }
}

// 补全嵌套的Package、Buyer、BuyerProfile结构体
struct TicketPackage: Codable {
    let title: String
    let buyer: Buyer
    enum CodingKeys: String, CodingKey {
        case title, buyer
    }
}

struct Buyer: Codable {
    let name: String
    let family_name: String?
    let email: String
    let buyer_profile: BuyerProfile
    enum CodingKeys: String, CodingKey {
        case name, family_name, email, buyer_profile
    }
}

struct BuyerProfile: Codable {
    let telephone: String
    enum CodingKeys: String, CodingKey {
        case telephone
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 09:06:07