我的本地磁盘上有一个.json数据文件。它采用以下格式:
{
"employees" [
{
"Name" : "John",
"Location" : "Austin",
"Age" : "30"
},
.....
],
.....
}
现在我想读取文件并将数据加载到UITableView中。我最初的想法是将数据放入一个数组并使用该数组填充表。但我无法找到正确的步骤来实现这一点。
到目前为止我尝试过的方法:
let currentFileURL = URL(string: currentFileString)
do {
let currentData = try Data(contentsOf: currentFileURL!)
let jsonData = try JSONSerialization.jsonObject(with: currentData, options:.allowFragments)
//***********************************************************
//How to proceed here? Or am I using the right methods above?
//***********************************************************
} catch {
//catch the error here
}
感谢您的帮助!
保罗答案 0 :(得分:1)
最好的方法是创建自定义class
或struct
,并使用tableView
方法使用该自定义类对象的数组。
class Employee {
var name: String?
var location: String?
var age: Int?
init?(dictionary: [String: String]) }
if let name = employee["Name"], let location = employee["Location"], let ageStr = employee["Age"], let age = Int(ageStr) {
self.name = name
self.location = location
self.age = age
}
else {
return nil
}
}
}
现在在Controller中声明一个Employee
实例数组,并将该数组与tableView
方法一起使用。
var employees = [Employee]()
//Initialize array
do {
let currentData = try Data(contentsOf: currentFileURL!)
if let jsonArray = (try? JSONSerialization.jsonObject(with: currentData, options: [])) as? [[String: String]] {
self.emplyees = jsonArray.flatMap({ Employee(dictionary: $0) })
}
//Reload the tableView
self.tableView.reloadData()
现在只需将此数组与UITableView
方法一起使用。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.employees.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ProductCell") as! CustomTableCell
cell.lblName = self.employees[indexPath.row].name
//set other details
return cell
}
答案 1 :(得分:0)
if let employees = jsonData["employees"] as? [[String:String]] {
for employee in employees {
if let name = employee["Name"] {
// Set employee name
}
if let location = employee["Location"] {
// Set employee location
}
if let age = employee["Age"] {
// Set employee age
}
}
}
答案 2 :(得分:0)
首先创建一个结构Employee
和一个数据源数组
struct Employee {
var title : String
var location : String
var age : String
}
var employees = [Employee]()
然后解析JSON。
重要提示:访问文件系统网址时,您必须在fileURLWithPath
上使用URL
。
let currentFileURL = URL(fileURLWithPath: currentFileString)
do {
let currentData = try Data(contentsOf: currentFileURL)
let json = try JSONSerialization.jsonObject(with:currentData, options: []) as! [String:Any]
let people = json["employees"] as! [[String:String]]
for person in people {
employees.append(Employee(title: person["Name"]!, location: person["Location"]!, age: person["Age"]!))
}
} catch let error as NSError {
print(error)
}
由于json文件位于本地磁盘上,并且您负责内容,因此强制解包是安全的或显示设计错误。