Edited at

JSONデータをSwiftで扱う


この記事は何?

JSON形式で記述されたデータをSwiftプログラミングで扱う方法です。


実行環境

macOS10.15 Catalina beta7

Xcode11 beta7


コンテキスト

Xcodeプロジェクトのリソースとして、JSON形式のファイル someData.json があることを前提にしています。


コード全体

プロジェクトのどこかに、次のように記述したSwiftファイルを配置しておくと、JSONデータをでコートした内容が割り当てられた定数 someData を呼び出すことができます。


JSONデータをコードで扱う

let someData: [SomeDecodableType] = load("someData.json")

func load<T: Decodable>(_ filename: String, as type: T.Type = T.self) -> T {
let data: Data
let decoder = JSONDecoder()

guard let file = Bundle.main.url(forResource: filename, withExtension: nil) else {
fatalError("No \(filename) in main bundle.")
}

data = try! Data(contentsOf: file)
return try! decoder.decode(type, from: data)
}



someData

グローバル定数として someData を定義しています。

let someData: [SomeDecodableType] = load("someData.json")

: [SomeDecodableType] と明示することで、load() 関数内で扱う方が推論されます。

なお、SomeDecodableTypeCodable プロトコルに準拠している必要があります。

JSONファイルの構成と一致していることも注意してください。