Codableを使ってJSONを解析する
Codable
は、Encodable
および Decodable
プロトコルのエイリアスです。Codable プロトコルに準拠すると、データをエンコードおよびデコードできます。
例えば、以下のようなデータを格納する構造体があります。この構造体を Codable プロトコルに準拠します。
struct Cat: Codable {
let name: String
let age: Int
}
let catsData = [
Cat(name: "Bella", age: 5),
Cat(name: "Chloe", age: 7),
Cat(name: "Lily", age: 2)
]
Cat 内で次のようなメソッドを定義します。
static func save() {
do {
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(catsData)
// write JSON data to a file in the Documents directory
if let url = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask).first?
.appendingPathComponent("Cats") {
try data.write(to: url)
print(url)
}
} catch {
print(error.localizedDescription)
}
}
static func load() {
if let url = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask).first?
.appendingPathComponent("Cats") {
do {
// load the data from the URL
let data = try Data(contentsOf: url)
let decoder = JSONDecoder()
let cats: [Cat] = try decoder.decode([Cat].self, from: data)
cats.forEach {
print($0)
}
} catch {
print(error.localizedDescription)
}
}
}
Cat.save()
を呼び出すと、catsData オブジェクトを JSON データに変換し、ファイルに書き出します。
そして、Cat.load()
を使用して JSON を読み込み、catsData オブジェクトに変換します。