- 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]
}
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)
}
}