簡體   English   中英

如何從 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 請求時, 像這樣。 和類型 Decodable 結構遵循 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

我收到一條錯誤消息,上面寫着“'[TravelDetail]' 類型的值沒有成員 'Leg'

我不知道為什么,但是當我在@Published var 中使用 [TravelDetail] [TravelDetail]()而不是[TripTest]()並在數據集 1 的 Leg 之前的 Trip 處停止時,它可以工作,那么它似乎至少構建成功。 但現在我無法從請求中獲取名稱和類型信息

完整代碼

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 ?? []

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM