我在Json文件中有2D类型的数组数据,并希望在视图模型中提取数据,我尝试了很多次,但无法提取数据。我使用了从QuickType.io生成的模型。我使用MVVM模式提取数据。
这是我Json数据
{ "publisherPlans": [[ "Name", "Free","Prime" ],["Book Sell",9999,9999],["Book Bulk Sell",0,9999],["Magazine start-up",9999,9999],["Demo book request count for School",5,9999],["Demo book request Acception",9999,9999],["Assign book for demo",25,9999]]}
这是我模型,由网站生成
public struct SchoolPlanModel: Decodable {
public let publisherPlans: [[PublisherPlan]]
}
public enum PublisherPlan:Decodable {
case integer(Int)
case string(String)
}
这是我的ViewModel,我正在尝试从Json文件中获取数据
class ReadData: ObservableObject {
@Published var datas = [String]()
func getData() async {
guard let url = URL(string: "********api/plans") else { return }
do {
let (data, _) = try await URLSession.shared.data(from: url)
Task{@MainActor in
let results = try JSONDecoder().decode(SchoolPlanModel.self, from: data).publisherPlans
print(results)
}
} catch {
print("---> error: \(error)")
}
}
}
这是我的视图我想在这里显示数据。
struct SchoolPlanView: View{
@StateObject var list = ReadData()
var body: some View{
ForEach(list.datas,id: \.self) { array in
HStack{
ForEach(array.utf8CString, id: \.self) { element in
Text("\(element)")
}
}
}
}
}
1条答案
按热度按时间0lvr5msh1#
试试这个方法,对我很有效。2我不得不在你的代码中修改一些东西,但是应该很容易理解。3如果你需要更多的解释,请告诉我。
编辑-1:
要获取列标题,请尝试此方法,在
getData()
中,在源位置将数据和标题分开。您必须使用列等调整显示...