这是我第一次使用JSON。我有一个JSON文件,可将城市和国家/地区与时区相关联。这是内容样本。
[
{
"name": "Abidjan",
"country": "Ivory Coast",
"timeZoneName": "Africa/Bamako"
},
{
"name": "Abu Dhabi",
"country": "U.A.E.",
"timeZoneName": "Asia/Dubai"
}
]
我正在尝试使用codable来解析文件,但是我用来解析文件的功能无法正常工作。 文件中的每个实例都有一个结构。
struct LoadedTimeZone: Codable {
var name: String
var country: String
var timeZoneName: String
}
我有一个结构,可将解码后的内容直接加载到
struct LoadedTimeZones: Codable {
var results: [LoadedTimeZone]
}
在我的UITableViewController的viewDidLoad中,添加了以下代码:
if let url = Bundle.main.url(forResource: "CitiesAndTimeZones", withExtension: "json") {
if let data = try? Data(contentsOf: url) {
parse(json: data)
}
}
这是parse(json:Data)的函数
func parse(json: Data) {
let decoder = JSONDecoder()
if let jsonTimeZones = try? decoder.decode(LoadedTimeZones.self, from: json) {
timeZones = jsonTimeZones.results
tableView.reloadData()
}
}
timeZones在viewDidLoad上方声明为var timeZones = [LoadedTimeZone]()
。
经过一些调试,似乎jsonTimeZones返回nil。 我研究了Stackoverflow和Internet上的多种情况,而我所做的似乎并没有太大不同。
非常感谢您的帮助。
答案 0 :(得分:0)
替换
if let jsonTimeZones = try? decoder.decode(LoadedTimeZones.self, from: json) {
使用
if let jsonTimeZones = try? decoder.decode([LoadedTimeZone].self, from: json) {
您的根是一个数组,并且您的json中没有名为results
的键
struct LoadedTimeZone: Codable {
let name,country,timeZoneName: String
}