はじめに
Swift4で、標準ライブラリのCodableプロトコルを使い、
JSONのパース処理を行った。
実装
-
Stringのエクステンションを追加
extension String { func decodeJSON<T>(_ type: T.Type) throws -> T where T : Decodable { return try JSONDecoder().decode(type, from: self.data(using: .utf8)!) } }
-
エンティティを定義
struct User : Codable { let name: String } struct Group : Codable { let users: [User] }
-
呼び出し元
do { let user = try "{\"name\":\"佐藤\"}".decodeJSON(User.self) let users = try "[{\"name\":\"佐藤\"},{\"name\":\"鈴木\"}]".decodeJSON([User].self) // ←typeは配列型 let group = try "{\"users\":[{\"name\":\"佐藤\"}]}".decodeJSON(Group.self) } catch { print("解析失敗") }