【发布时间】:2021-09-02 11:59:17
【问题描述】:
多年来我一直在为此苦苦挣扎,但我完全不明白为什么我无法通过这个。
我有一个如下所示的数组:
{
"status": "OK",
"tickets": {
"open_tickets": [
{
"uuid": "XXXXXXX",
"package": {
"title": "XXXX",
"buyer": {
"name": "XXX",
"family_name": null,
"email": "XXXXX",
"buyer_profile": {
"telephone": "5435345"
}
}
}
}
],
"closed_tickets": []
}
}
我正在尝试访问嵌套数组。具体来说,open_tickets。
所以,我试过这个:
我把它放在了结构和主体之间的视图顶部:
@ObservedObject var fetcherL = FetcherL()
现在我尝试从远程 URL 读取该数据:
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 {
//self.ticket = res.tickets.open_tickets
self.ticket = res.tickets.open_tickets
}
}else {
print("No Data")
}
} catch {
print (error)
}
}.resume()
}
}
struct RootO: Codable {
let tickets: [Tickets]
enum CodingKeys: String, CodingKey {
case tickets = "tickets"
}
}
struct Tickets: Codable {
let open_tickets: [Open_Tickets]
enum CodingKeys: String, CodingKey {
case open_tickets = "open_tickets"
}
}
struct Open_Tickets: Codable{
let ticket_number: String
enum CodingKeys: String, CodingKey {
case ticket_number = "ticket_number"
}
}
但是这段代码给出了这个错误并阻止我编译我的应用程序:
Value of type '[Tickets]' has no member 'open_tickets'
有人可以请教一下吗?
【问题讨论】:
-
将模型中的
let tickets: [Tickets]更改为let tickets: Tickets。在 json 中,tickets不是数组而是对象。 -
@RajaKishan,产生
keyNotFound(CodingKeys(stringValue: "tickets", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"tickets\", intValue: nil) (\"tickets\").", underlyingError: nil)) -
使用某个站点从 json 创建模型:app.quicktype.io
标签: arrays swift dictionary swiftui