无法解析JSON文件

时间:2019-06-25 15:53:30

标签: json swift

这是我第一次使用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上的多种情况,而我所做的似乎并没有太大不同。

非常感谢您的帮助。

1 个答案:

答案 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 
}