JSONを扱うにはCodableが便利
Swiftを5年ぶりに触ってたんですが、なんだかCodableというJSONを簡単に扱えるプロトコルが実装されてて非常に感動しました。
3週間前のメモなんで8割がた忘れちゃったんですが、頑張って思い出しながら書いてみます。
Codableとは
公式のリファレンスはこちら (https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types)
ざっくりいうと、ネットワーク経由でのデータのやりとりやデータのファイル保存で扱うJSONなどをカスタムした型へエンコードやデコードするためのプロトコルって話ですね。
今回はJSON利用しましたが、他にもいろいろ使えそうな予感がします。
JSONをCodableを用いて扱う具体例
{ "name": "saruhei", "address": { "country": "Japan", "city": "Tokyo" } }
JSONをデコード
struct Sample: Codable { let name: String let address: AddressBody struct AddressBody: Codable { let country: String let city: String } } let jsonData: String = "さっきのJSONデータ" let decoder: JSONDecoder = JSONDecoder() do { let sample: Sample = try decoder.decode(Sample.self, from: jsonData.data(using: .utf8)!) let name = (sample.name) } catch { print("なんかエラー処理") }
これだけで大丈夫のよう。
JSONのデコーダーでCodableが勝手にマッピングしてくれます。なにこれ便利
JSONへエンコード
struct Sample: Codable { let name: String let address: AddressBody struct AddressBody: Codable { let country: String let city: String } } let sample = Sample(name: "saruhei", address: Sample.AddressBody(country: "Japan", city: "Tokyo")) let encoder = JSONEncoder() do { let data = try encoder.encode(sample) let jsonstr:String = String(data: data, encoding: .utf8)! print(jsonstr) } catch { print("なんかエラー処理") }
こっちもまぁ簡単ですね。 想像どおりのコードになりました。
まとめ
コードにツッコミどころはあるかもしれませんが。それはまぁこんな感じで実装できるよって目安程度だと思ってください。 SwiftでJSON扱うのはもう全然大変じゃない!Codableでドカンと一発!以上!
参考にした記事
SwiftでJSON作成、読込みする方法( Swift4 Codableを利用) – digitalnauts – Medium