これが私の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?
}
}
私は見てきましたAppleのドキュメントネストされた構造体のデコードについてですが、JSON のさまざまなレベルを適切に行う方法がまだわかりません。ご協力いただければ幸いです。
ベストアンサー1
もう一つのアプローチは、JSONによく一致する中間モデルを作成することです(次のようなツールの助けを借りて)。クイックタイプ) の場合は、Swift でデコードするメソッドを生成し、最終的なデータ モデルで必要な部分を選択します。
// snake_case to match the JSON and hence no need to write CodingKey enums
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
これにより、将来 に 1 つ以上の値が含まれるようになった場合でも、 を簡単に反復処理できるようになります。