1

API の json 応答があります。これは辞書であるまた値を返します。このディクショナリの値のみを保存/マップするにはどうすればよいですか。これは単純にプレイグラウンドに入れることができる例です:

id = ["$oid": "591ae6cb9d1fa2b6e47edc33"]

だけであるべき

id = "591ae6cb9d1fa2b6e47edc33"

これは単純にプレイグラウンドに入れることができる例です:

import Foundation

struct Location : Decodable {
    enum CodingKeys : String, CodingKey {
        case id = "_id"
    }
    var id : [String:String]? // this should be only a string with the value of "$oid"
}

extension Location {
    public init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        id = try values.decode([String:String]?.self, forKey: .id)
    }
}


var json = """
[
    {
        "_id": {
            "$oid": "591ae6cb9d1fa2b6e47edc33"
        }
    },
    {
        "_id": {
            "$oid": "591ae6cd9d1fa2b6e47edc34"
        }
    }
]

""".replacingOccurrences(of: "}\n{", with: "}\\n{").data(using: .utf8)!

let decoder = JSONDecoder()

do {
    let locations = try decoder.decode([Location].self, from: json)
    locations.forEach { print($0) }
} catch {
    print(error.localizedDescription )
}
4

1 に答える 1