web-dev-qa-db-ja.com

Swift動的キーでコード化可能

私はJSON構造として:

"periods": {
    "2018-06-07": [
      {
        "firstName": "Test1",
        "lastName": "Test1"
      }
    ],
    "2018-06-06": [
      {
        "firstName": "Test1",
        "lastName": "Test1"
      }
    ]
}

私はそれを次のように解析しようとしました:

public struct Schedule: Codable {
    public let periods: Periods
}

public struct Periods: Codable {
    public let unknown: [Inner]

    public struct Inner: Codable {
        public let firstName: String
        public let lastName: String
    }

    private struct CustomCodingKeys: CodingKey {
        var stringValue: String
        init?(stringValue: String) {
            self.stringValue = stringValue
        }

        var intValue: Int?
        init?(intValue: Int) {
            return nil
        }
    }

    public init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CustomCodingKeys.self)
        self.unknown = try container.decode([Inner].self, forKey: CustomCodingKeys(stringValue: "2018-06-06")
    }
}

しかし、私は1つの値に対してのみ結果を得ることができます(2018-06-06)。ここには、解析したい日付が複数あります。これは可能ですか?

5
Masta

有効なJSONにするために、JSONの先頭に{を、最後に}を追加すると、次のようなコードでピリオドを簡単に抽出できると思います。

struct Period: Decodable {
    let firstName: String, lastName: String
}

let schedule = try? JSONDecoder().decode([String:[String:[Period]]].self, from: jsonData!)
let periods = schedule?.values.first?.values
0
Meseery