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) // AliceJSONへのエンコード
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- async/awaitによるURLSession data(from:)
- Codable:JSONのエンコードとデコード
- エラーハンドリングとHTTPステータスコード
- リトライロジックとバックグラウンドURLSession