如何使用SwiftUI解码嵌套的JSON元素并在视图中显示信息?

如何使用SwiftUI解码嵌套的JSON元素并在视图中显示信息?,swiftui,Swiftui,我能够显示JSON的名称、每次发布的成本等。但是,我无法访问有效负载\u权重和flic\u图像的值。我想是因为它们在一系列对象中 这是JSON文件的一部分 [ { "rocketid": 1, "id": "falcon1", "name": "Falcon 1", "type": "rocket", "

我能够显示JSON的名称、每次发布的成本等。但是,我无法访问
有效负载\u权重
flic\u图像
的值。我想是因为它们在一系列对象中

这是JSON文件的一部分

[
  {
    "rocketid": 1,
    "id": "falcon1",
    "name": "Falcon 1",
    "type": "rocket",
    "active": false,
    "stages": 2,
    "boosters": 0,
    "cost_per_launch": 6700000,
    "success_rate_pct": 40,
    "first_flight": "2006-03-24",
    "country": "Republic of the Marshall Islands",
    "company": "SpaceX",
    "height": {
      "meters": 22.25,
      "feet": 73
    },
    "diameter": {
      "meters": 1.68,
      "feet": 5.5
    },
    "mass": {
      "kg": 30146,
      "lb": 66460
    },
    "payload_weights": [
      {
        "id": "leo",
        "name": "Low Earth Orbit",
        "kg": 450,
        "lb": 992
      }
    ]
这是我的模型:

struct Rocket: Codable, Identifiable {
    var id: String
    var name: String
    var type: String
    var active: Bool
    var stages: Int
    var boosters: Int
    var cost_per_launch: Int
    
    struct PayloadWeight: Codable {
        var id: String
        var name: String
        var kg: Int
        var lb: Int
    }
    
    var payload_weights: [PayloadWeight]
}
这是我要显示数据的视图

struct ContentView: View {
    let rockets = Bundle.main.decode([Rocket].self, from: "Rocket.json")
   
    var body: some View {
        List(rockets) { rocket in
            HStack {
                Text(rocket.name)
            }
        }
    }
}

payload\u weights
属性是一个数组。这意味着您可以访问第一个项目(如果存在)或显示所有项目

您可以尝试以下方法:

struct ContentView: View {
    let rockets: [Rocket] = Bundle.main.decode([Rocket].self, from: "Rocket.json")
   
    var body: some View {
        List(rockets) { rocket in
            VStack {
                Text(rocket.name)
                List(rocket.payload_weights) { payloadWeight in
                    self.payloadWeightView(payloadWeight: payloadWeight)
                }
            }
        }
    }
    
    func payloadWeightView(payloadWeight: Rocket.PayloadWeight) -> some View {
        Text(payloadWeight.name)
    }
}
注意:您还需要将
有效负载重量
可识别
一致:

struct PayloadWeight: Codable, Identifiable { ... }

payload\u weights
属性是一个数组。这意味着您可以访问第一个项目(如果存在)或显示所有项目

您可以尝试以下方法:

struct ContentView: View {
    let rockets: [Rocket] = Bundle.main.decode([Rocket].self, from: "Rocket.json")
   
    var body: some View {
        List(rockets) { rocket in
            VStack {
                Text(rocket.name)
                List(rocket.payload_weights) { payloadWeight in
                    self.payloadWeightView(payloadWeight: payloadWeight)
                }
            }
        }
    }
    
    func payloadWeightView(payloadWeight: Rocket.PayloadWeight) -> some View {
        Text(payloadWeight.name)
    }
}
注意:您还需要将
有效负载重量
可识别
一致:

struct PayloadWeight: Codable, Identifiable { ... }