諸行無常

IT色々お勉強中のブログ

swift Codableの使い方

swift Codableの使い方

  • こういうJSONがあった場合
import Foundation
let hoge = "{\"id\":1,\"family_id\":12345,\"user\":{\"id\":20,\"display_name\":\"hoge\",\"name\":\"hoge\",\"text\":\"自己紹介文\",\"mail_address\":\"user@hoge.jp\",\"auth\":\"member\",\"status\":0,\"created_at\":\"2019-01-09T16:42:43+09:00\",\"image\":{\"id\":1,\"url\":\"https://hoge.cloudfront.net/image/user_images/normal/fugaUTC.jpg\",\"url_thumbnail\":\"https://foo.cloudfront.net/image/user_images/normal/bar.jpg\"}},\"hogehoge\":{\"id\":20,\"display_name\":\"kudo\",\"name\":\"hoge\",\"text\":\"自己紹介文\",\"mail_address\":\"user@hoge.jp\",\"auth\":\"member\",\"status\":0,\"created_at\":\"2019-01-09T16:42:43+09:00\",\"image\":{\"id\":1,\"url\":\"https://hoge.cloudfront.net/image/user_images/normal/fugaUTC.jpg\",\"url_thumbnail\":\"https://foo.cloudfront.net/image/user_images/normal/bar.jpg\"}},\"status\":\"are\",\"description\":\"一部古い情報を修正しました\",\"updated_at\":\"2018-11-07T06:53:13Z\","}"

こういうCodableを定義します。

struct User: Codable {
    let id: Int
    let displayName: String
    let name: String
    let text: String
    let mailAddress: String
    let auth: String
    let status: Int
    let createdAt: Date
    let image: Image
}
struct Image: Codable {
    let id: Int
    let url: URL
    let urlThumbnail: URL
}

struct Kuso: Codable {
    let id: Int
    let familyId: Int
    let applicant: User
    let approver: User
    let status: String
    let description: String
    let updatedAt: Date
    let applicantNameAtApplied: String
    let approverNameAtApproved: String
}

snakecaseに返還させる方法

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase

Date型を受け取る方法

decoder.dateDecodingStrategy = .iso8601

あとはデコード

let boke = try! decoder.decode(Kuso.self, from: hoge.data(using: .utf8)!)
print(boke)