首页 > 解决方案 > 解析json文件后如何访问具体的数组数据?

问题描述

这是JSON:

[
  {
    "District_en": "Kowloon City",
    "Name_en": "Carpenter Road Park",
    "GIHS": "9G5i7NFpXL",
    "Court_no_en": "4",
    "Court_no_cn": "4"
  },
  {
    "District_en": "Kowl",
    "Name_en": "Road Park",
    "GIHS": "9G5i7NFaXL",
    "Court_no_en": "5",
    "Court_no_cn": "6"
  }
]

这是我的代码:

func loadjson() {
        if let url = Bundle.main.url(forResource: "court", withExtension: "json"){
            do{
                let data = try Data(contentsOf: url)
                let decoder = JSONDecoder()
                let jsondata = try decoder.decode([Court].self, from: data)
                print(jsondata)
                } catch {
                print(error)
            }
        }
}

我有一个本地化的 JSON 文件,我知道如何解析文件,但是在解析文件后,我不知道如何访问里面的特定数组数据。

标签: swift

解决方案


当您获取 json 数据时,您需要将其转换为您的模型 Court。Court 应该有一个特殊的初始化程序,将 json 数据转换为模型的属性。像这样:

struct Court: Codable {
   var district: String
   var name: String
   // and so on

   init?(json: [String: Any]) {
      guard let district = json["District_en"] as? String,
           let name = json["Name_en"] as? String else {
           return nil
       }

       self.district = district
       self.name = name
   }
}

然后您可以从 json 数据中获取模型:

let jsonData = try JSONSerialization.jsonObject(with: data, options: [])

if let json = jsonData as? [[String: Any]] {
      let array = json.compactMap(Court.init)

      print(array)
}
// Prints: [Court(district: "Kowloon City", name: "Carpenter Road Park"), Court(district: "Kowl", name: "Road Park")]

推荐阅读