はじめに

Codableを利用するとJSONが扱いやすくなるようなので、
試してみました。

もうSwiftyJSONやObjectMapperなどのライブラリも不要になりそうです。

試してみる

1. JSONデータを用意する

テストデータ(JSON)
{
    "dateString":"2017-06-08 14:43:28 +0000",
    "weeks":[
             "sunny",
             "sunny",
             "cloudy",
             "cloudy",
             "cloudy",
             "rainy",
             "snowy"
        ]
}

2. 構造体を定義する

構造体にCodableを実装する

Forecast.swift
struct Forecast: Codable {

    enum WeatherType: String, Codable {
        case sunny, cloudy, rainy, snowy
    }

    var dateString = ""
    var weeks: [WeatherType]
}

3. JSONをパースする

decodeの第一引数にデータ型を指定すると、ドットでアクセスできるようになります。
簡単ですね。

デコードする

    if let path = Bundle.main.path(forResource: "forecast", ofType: "json") {

        let jsonData = try! Data(contentsOf: URL(fileURLWithPath: path))

        let jsonDecoder = JSONDecoder()
        let forecast = try! jsonDecoder.decode(Forecast.self, from: jsonData)

        //ドットでアクセスできる
        print(forecast.dateString)

        _ = forecast.weeks.map {
            print($0)
        }
    }
出力結果
2017-06-08 14:43:28 +0000
sunny
sunny
cloudy
cloudy
cloudy
rainy
snowy

[おまけ] JSONのエンコードのサンプル

    let forecast = Forecast(dateString: Date().description,
                                weeks: [.sunny, .sunny, .cloudy, .rainy, .snowy])
    let jsonEncoder = JSONEncoder()
    let jsonData = try! jsonEncoder.encode(forecast)
    let jsonString = String(data: jsonData, encoding: .utf8)
    print(jsonString ?? "unwap json")

    /// {"weeks":["sunny","sunny","cloudy","rainy","snowy"],"dateString":"2017-06-08 15:11:21 +0000"}