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