如何从 GET 请求中调用在 Swift 中具有较长嵌套 JSON 结构的已解析数据?

How do i call the parsed data from the GET request that have a longer nested JSON structure in Swift?

注意:请原谅我的无能,我对此还是个新手。完整代码贴在底部。

问题:似乎当我有一个短嵌套时,我可以为我的@Published 属性 调用它但是当我尝试一个带有较长嵌套的 api 请求时,like this. 并键入遵循 GET 请求结构的可解码结构

struct TripScheduleTest: Codable {
    let TripList: InitialNest
}
struct InitialNest: Codable {
    var Trip: [TravelDetail]

}
struct TravelDetail: Codable {
    var Leg: [TripTest]
}
struct TripTest: Codable, Hashable {
    var name: String
    var type: String
}

我无法为 @Published var dataSet1 = [TripTest]()

调用它
                self.dataSet1 = tripJSON.TripList.Trip.Leg

I get an error message, that says "Value of type '[TravelDetail]' has no member 'Leg'

我不确定为什么,但是当我在 @Published var 中使用 [TravelDetail]() 而不是 [TripTest]() 并在 dataSet1 的 Trip before Leg 处停止时,它会起作用,那么它似乎至少构建成功。但是现在我无法从请求中获取名称和类型信息

完整代码

import SwiftUI

struct TripScheduleTest: Codable {
    let TripList: InitialNest
}
struct InitialNest: Codable {
    var Trip: [TravelDetail]

}
struct TravelDetail: Codable {
    var Leg: [TripTest]
}
struct TripTest: Codable, Hashable {
    var name: String
    var type: String
}



class TripViewModel: ObservableObject {

    @Published var dataSet1 = [TripTest]()

    init() {
        let urlString = "http://xmlopen.rejseplanen.dk/bin/rest.exe/trip?originId=8600790&destId=6553&format=json"
        guard let url = URL(string: urlString) else { return }
        URLSession.shared.dataTask(with: url) { (data, resp, err) in

            guard let data = data else { return }
            do {
                let tripJSON = try
                    JSONDecoder().decode(TripScheduleTest.self, from: data)
                print(data)
                DispatchQueue.main.async {
                    self.dataSet1 = tripJSON.TripList.Trip.Leg
                }





            } catch {
                print("JSON Decode error: ", error)
            }
        }.resume()
    }
}


struct TripView: View {

@ObservedObject var vm = TripViewModel()

var body: some View {


    List(vm.dataSet1, id: \.self) { day in
        Text("Test")
            .font(.system(size: 12, weight: .bold))
        Text(" \(day.name)")
            .font(.system(size: 12))
    }
}

}

Trip是一个数组(注意[]

例如,您需要通过索引获取数组中的一项

tripJSON.TripList.Trip.first?.Leg

要将值分配给非可选数组写入

self.dataSet1 = tripJSON.TripList.Trip.first?.Leg ?? []