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 オブジェクトに変換します。

Tags:

Updated: