[解決済み] Swift Codableからプロパティを除外する方法は?
2022-05-13 20:55:37
質問
スウィフトの
Encodable
/
Decodable
Swift 4 でリリースされたプロトコルにより、JSON の (デ) シリアル化が非常に快適になりました。しかし、どのプロパティがエンコードされるべきで、どのプロパティがデコードされるべきかを細かく制御する方法はまだ見つかっていません。
私は、プロパティを付随する
CodingKeys
enum は、そのプロパティをプロセスから完全に除外しますが、もっと細かく制御する方法はないでしょうか?
どのように解決するのですか?
エンコード/デコードするキーのリストを制御するのが
CodingKeys
(注
s
を最後に追加してください)。コンパイラはこれを合成してくれますが、いつでも上書きすることができます。
というプロパティを除外したいとします。
nickname
の両方のエンコーディングから
と
を復号化する。
struct Person: Codable {
var firstName: String
var lastName: String
var nickname: String?
private enum CodingKeys: String, CodingKey {
case firstName, lastName
}
}
非対称にしたい場合(つまり、エンコードするがデコードしない、またはその逆)は、独自の実装で
encode(with encoder: )
と
init(from decoder: )
:
struct Person: Codable {
var firstName: String
var lastName: String
// Since fullName is a computed property, it's excluded by default
var fullName: String {
return firstName + " " + lastName
}
private enum CodingKeys: String, CodingKey {
case firstName, lastName, fullName
}
// We don't want to decode `fullName` from the JSON
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
firstName = try container.decode(String.self, forKey: .firstName)
lastName = try container.decode(String.self, forKey: .lastName)
}
// But we want to store `fullName` in the JSON anyhow
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(firstName, forKey: .firstName)
try container.encode(lastName, forKey: .lastName)
try container.encode(fullName, forKey: .fullName)
}
}
関連
-
TypeError: タイプ 'bytes' のオブジェクトは JSON シリアライズ可能ではありません。
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] JSONファイルからRにデータをインポートする【重複あり
-
[解決済み] ネストされたJSONオブジェクトのアンマーシャリング
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】jq: 文字列で配列のインデックスを作成できない
-
[解決済み] SQLAlchemy (psycopg2.ProgrammingError) can't adapt type 'dict'.
-
[解決済み] Golang で文字列を構造体のようにアンマーシャリングする
-
[解決済み] Postgresで、レコードにjsonや文字列が混在している場合に、'invalid input syntax for type json'を防ぐにはどうしたらよいでしょうか。
-
[解決済み] UnixツールでJSONをパースする
-
[解決済み] JSONファイルのMongoimport
-
[解決済み] PostgresのJSON配列に文字列が含まれているかどうかをチェックする
-
[解決済み] JSONファイルからRにデータをインポートする【重複あり
-
[解決済み] SwiftでJSON辞書の型を持つプロパティをデコードする方法 [45] デコード可能なプロトコル
-
[解決済み] PostgresでJSONフィールドにインデックスを作成するには?