0Pricing
Swift Academy · レッスン

Codable:JSONのエンコードとデコード

Codableへの適合、カスタムCodingKeys、ネストしたコンテナのデコードを学びます。

「Codable:JSONのエンコードとデコード」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

Codableプロトコル

CodableはEncodable & Decodableの型エイリアスです。準拠する型は、JSONとのエンコードとデコードを自動的に行えます。

struct User: Codable {
  var name: String
  var age: Int
}

自動的な実装合成

すべての保存プロパティがそれ自体Codableに準拠している場合、SwiftはCodableの実装を合成します。

struct Product: Codable {
  var id: Int
  var title: String
  var price: Double
  // init(from:) and encode(to:) are auto-generated
}

JSONのデコード

JSONDecoderを使用して、DataをDecodable型にデコードします。

let json = #"{"name":"Alice","age":30}"#.data(using: .utf8)!
let user = try JSONDecoder().decode(User.self, from: json)
print(user.name) // Alice

JSONへのエンコード

JSONEncoderを使用して、Codable値をDataにエンコードします。

let user = User(name: "Bob", age: 25)
let data = try JSONEncoder().encode(user)
print(String(data: data, encoding: .utf8)!)

カスタム CodingKeys

CodingKeys 列挙型を使用して、Swift のプロパティ名と JSON キーを対応付けます。

struct Article: Codable {
  var createdAt: Date
  enum CodingKeys: String, CodingKey {
    case createdAt = "created_at"
  }
}

日付のデコード戦略

JSONDecoder.dateDecodingStrategy を設定して、さまざまな形式の日付を解析します。

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let article = try decoder.decode(Article.self, from: data)

ネストされたコンテナ

ネストされた JSON オブジェクトは、ネストされた Codable 構造体を定義するか、キー付きコンテナを手動で使用してデコードします。

struct Response: Codable {
  struct Data: Codable {
    var users: [User]
  }
  var data: Data
}
let resp = try JSONDecoder().decode(Response.self, from: json)

カスタムデコードロジック

標準とは異なる JSON 構造に対応したり、デコード中に変換を適用したりするには、init(from:) をオーバーライドします。

struct Rating: Codable {
  var stars: Int
  init(from decoder: Decoder) throws {
    let container = try decoder.singleValueContainer()
    let raw = try container.decode(Double.self)
    stars = Int(raw.rounded())
  }
  func encode(to encoder: Encoder) throws {
    var container = encoder.singleValueContainer()
    try container.encode(Double(stars))
  }
}

keyDecodingStrategy

.convertFromSnakeCase を使用すると、JSON の snake_case キーを Swift の camelCase プロパティに自動的に変換できます。

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let user = try decoder.decode(User.self, from: data)
// "first_name" → firstName

エンコードのオプション

JSONEncoder.outputFormatting を設定して、整形済み出力やソート済み出力を生成します。

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(product)

Optional フィールドの処理

プロパティを Optional として宣言すると、JSON キーが存在しない場合でもエラーをスローせずに適切に処理できます。

struct User: Codable {
  var name: String
  var bio: String?  // nil if "bio" key is absent from JSON
}

確認問題

JSON の snake_case キーを Swift の camelCase プロパティ名に自動的に対応付ける JSONDecoder の戦略はどれですか。

レッスンのまとめ

JSON の自動エンコードとデコードには Codable に準拠させます。プロパティ名を変更するには CodingKeys を使用し、snake_case の API には keyDecodingStrategy = .convertFromSnakeCase を使用します。標準とは異なる JSON にはカスタムの init(from:) を使用し、日付の解析には dateDecodingStrategy を使用します。

よくある質問

「Codable:JSONのエンコードとデコード」レッスンは無料ですか?

はい。「Codable:JSONのエンコードとデコード」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「Codable:JSONのエンコードとデコード」で何を学びますか?

Codableへの適合、カスタムCodingKeys、ネストしたコンテナのデコードを学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「Codable:JSONのエンコードとデコード」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. async/awaitによるURLSession data(from:)
  2. Codable:JSONのエンコードとデコード
  3. エラーハンドリングとHTTPステータスコード
  4. リトライロジックとバックグラウンドURLSession
← Swift Academyに戻る