很抱歉,如果以前已经回答了这个问题,但是我找不到能真正回答我问题的东西:所以我已经尝试了好几天了,但似乎无法使它正常工作。我正在尝试解析JSON文件中的嵌套数组以预览行中的项目。我不确定是否是因为我没有正确解码JSON文件或什么,但是任何帮助都会很棒!
MonthData的代码:// MonthData.swift //
struct MonthData: Codable {
var month: [MonthlyData]
}
struct MonthlyData: Codable {
var monthName: String
var dayInfo: [DailyData]
}
struct DailyData: Codable {
var id: Int
var whatILove: String
let imageName: String
var date: String
var paragraph: String
}
JSON文件(简体):// 2020Test.json //
[
"month": [
{
"monthName": "July",
"dayInfo": [
{
"whatILove": "I Love Your Smile",
"imageName": "image1",
"date": "07/22/20",
"paragraph": "...",
"id": 1
},
{
"whatILove": "I Love Your Laugh",
"imageName": "image2",
"date": "07/23/20",
"paragraph": "...",
"id": 2
},
]
},
{
"monthName": "August",
"dayInfo": [
{
"whatILove": "I Love Your Music",
"imageName": "image4",
"date": "08/01/20",
"paragraph": "...",
"id": 11
},
{
"whatILove": "I Love Your Kiss",
"imageName": "image6",
"date": "08/02/20",
"paragraph": "...",
"id": 12
},
]
}
]
]
我一直在想这可能是我对其进行解码的方式,但是我也不确定-我只是使用了可以从Apple SwiftUI课程获得的Json文件。
Json解码器文件:// jsonDecode.swift //
let monthData: [MonthData] = load("2020Test.json")
func load<T: Decodable>(_ filename: String) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}
最后,这是我要使用JSON数据的文件:// DayRow.swift //
struct DayRow: View {
var day: DayData
var body: some View {
HStack {
Image(day.imageName)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 50, height: 50, alignment: .top)
.clipShape(Circle())
VStack(alignment: .leading) {
Text("\(day.date) - Day \(day.id)")
.font(.footnote)
.fontWeight(.light)
Text(day.whatILove)
.fontWeight(.semibold)
}
}
}
}
如果我的JsonDecoder运行正常,那么我不确定如何从嵌套数组中实际获取数据。我需要在DayRow.swift中调用其他变量吗?预先谢谢你!