jsonにキーが含まれない時

var json = """
{"hoge":"hi"}
"""

struct Hoge: Decodable {
  var hoge: String
  var fuga: String
}

let res = try! JSONDecoder.init().decode(Hoge.self, from: json.data(using: .utf8)!)

jsonにfugaが無いので、tryで落ちる

Fatal error: 'try!' expression unexpectedly raised an error: Swift.DecodingError.keyNotFound(__lldb_expr_39.Hoge.(CodingKeys in _62E2347B8FAED974B75E794A46D74006).fuga, Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key fuga (\"fuga\").", underlyingError: nil)): file /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-900.0.74.1/src/swift/stdlib/public/core/ErrorType.swift, line 181

存在しないキーがOptionalの時

var json = """
{"hoge":"hi"}
"""

struct Hoge: Decodable {
  var hoge: String
  var fuga: String?
}

let res = try! JSONDecoder.init().decode(Hoge.self, from: json.data(using: .utf8)!)

fugaにはnilが入り、マッピング出来る

存在しないキーに既に値が入っている時

var json = """
{"hoge":"hi"}
"""

struct Hoge: Decodable {
  var hoge: String
  var fuga: String? = "fuga"
}

let res = try! JSONDecoder.init().decode(Hoge.self, from: json.data(using: .utf8)!)

fugaにはnilが入った状態でマッピングされる

特定のプロパティをマッピングさせない

var json = """
{"hoge":"hi"}
"""

struct Hoge: Decodable {
  var hoge: String
  var fuga: String = "fuga"

  private enum CodingKeys: String, CodingKey {
    case hoge
  }
}

let res = try! JSONDecoder.init().decode(Hoge.self, from: json.data(using: .utf8)!)

CodingKeysに存在しないプロパティはマッピングされない。(fugaには"fuga"が入っている)
なお、デフォルト値は必須

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.