Swift Codable

231 阅读1分钟
  • Codable 是编码解码的协议,一般用来将json格式的数据转化为对象
  • 如下一种json内容:
  • 一般拿到数据如下方式进行解析
func loadJsonFile(name:String) {
        guard let path = Bundle.main.path(forResource: name, ofType: nil) else {
            fatalError("加载 menu.json 文件失败")
        }
        let url = URL(fileURLWithPath: path)
        guard let data = try? Data(contentsOf: url) else {
            fatalError("转化data数据失败")
        }
        guard let jsonResult:Any = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) else {
            fatalError("json解析失败")
        }
        NSLog("\(jsonResult)")
}
  • 使用 Codable ,先根据json格式建立两个类
  • MenuSection
class MenuSection: NSObject,Codable {

    var id:UUID
    var name:String
    var items:[MenuItem]
}
  • MenuItem
class MenuItem: NSObject,Codable {
    
    var id:UUID
    var name:String
    var photoCredit:String
    var price:Int
    var restrictions:[String]
    var represent:String
}
  • 解析
func loadJsonWithCodable(name:String) {
        guard let path = Bundle.main.path(forResource: name, ofType: nil) else {
            fatalError("加载 menu.json 文件失败")
        }
        let url = URL(fileURLWithPath: path)
        guard let data = try? Data(contentsOf: url) else {
            fatalError("转化data数据失败")
        }
        
        do {
            let result = try JSONDecoder().decode([MenuSection].self, from: data)
            print(result.count)
        } catch  {
            NSLog(error.localizedDescription)
        }
        
}