[解決済み] SwiftのDecodableプロトコルでネストしたJSON構造体をデコードする方法とは?
2022-09-23 21:14:23
質問
以下は私のJSONです。
{
"id": 1,
"user": {
"user_name": "Tester",
"real_info": {
"full_name":"Jon Doe"
}
},
"reviews_count": [
{
"count": 4
}
]
}
以下は、保存してほしい構造です(不完全ですが)。
struct ServerResponse: Decodable {
var id: String
var username: String
var fullName: String
var reviewCount: Int
enum CodingKeys: String, CodingKey {
case id,
// How do i get nested values?
}
}
私が見たのは アップルのドキュメント を見ましたが、JSONの異なるレベルを適切に行う方法がまだ理解できません。どんな助けでも大いに感謝します。
どのように解決するのですか?
もうひとつの方法は、JSON に密接に一致する中間モデルを作成することです (次のようなツールの助けを借りて)。 quicktype.io のようなツールの助けを借りて)、Swift にそれをデコードするメソッドを生成させ、最終的なデータモデルに必要なピースを選び出すことです。
// snake_case to match the JSON and hence no need to write CodingKey enums / struct
fileprivate struct RawServerResponse: Decodable {
struct User: Decodable {
var user_name: String
var real_info: UserRealInfo
}
struct UserRealInfo: Decodable {
var full_name: String
}
struct Review: Decodable {
var count: Int
}
var id: Int
var user: User
var reviews_count: [Review]
}
struct ServerResponse: Decodable {
var id: String
var username: String
var fullName: String
var reviewCount: Int
init(from decoder: Decoder) throws {
let rawResponse = try RawServerResponse(from: decoder)
// Now you can pick items that are important to your data model,
// conveniently decoded into a Swift structure
id = String(rawResponse.id)
username = rawResponse.user.user_name
fullName = rawResponse.user.real_info.full_name
reviewCount = rawResponse.reviews_count.first!.count
}
}
これはまた、簡単に反復して
reviews_count
を簡単に繰り返すことができます。
関連
-
[解決済み] 型 '{}' は型 'IntrinsicAttributes & IntrinsicClassAttributes' に代入できません。
-
[解決済み] JQ:キーに対するフィルタリング
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] JSONファイルをprettyprintする方法は?
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
-
[解決済み] UnixツールでJSONをパースする
-
[解決済み] JSONファイルのMongoimport
-
[解決済み] SwiftでJSON辞書の型を持つプロパティをデコードする方法 [45] デコード可能なプロトコル
-
[解決済み] Scalaで使うべき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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSON標準 - 浮動小数点数
-
[解決済み] JSONのXSLT対応
-
[解決済み] JSONの二重引用符をエスケープする方法
-
Ext.grid.EditorGridPanelを使用する際に発生する問題点
-
[解決済み】SwiftでJSONファイルを読み込む
-
[解決済み] どのようにjqを使用して2つのファイルから2つのJSONオブジェクトをマージするには?
-
[解決済み] JSON、REST、SOAP、WSDL、そしてSOA。これらはどのように結びついているのか
-
[解決済み] SwiftでJSON辞書の型を持つプロパティをデコードする方法 [45] デコード可能なプロトコル
-
[解決済み] PostgresでJSONフィールドにインデックスを作成するには?
-
[解決済み] Swift 4のDecodableプロトコルでカスタムキーを使うには?