Web APIから入手したり、もしくはBundleに保存したJSONファイルをパースし、オブジェクトとして使用出来るようにする。
例えば以下のようなJSONがあったとして、、、
{
"chords": [
{
"quality": "Major 7th",
"voicing": "Drop 2 & 4",
"inversion": "Root Position",
"notes": "36,16,31,12",
"root_note": 36
},
{
"quality": "Major 7th",
"voicing": "Drop 2 & 4",
"inversion": "1st Inversion",
"notes": "16,11,37,33",
"root_note": 11
}
]
}
この場合、以下のように対応するstructを作り
struct ServerResponse: Codable {
let chords: [ResponseChord]
struct ResponseChord: Codable, Hashable {
let quality: String
let voicing: String
let inversion: String
let notes: String
let root_note: Int
}
}
以下のように使用します。
guard let jsonPath = Bundle.main.path(forResource: "chords", ofType: "json") else { return }
do {
let data = try Data(contentsOf: URL(fileURLWithPath: jsonPath))
let jsonResult = try JSONDecoder().decode(ServerResponse.self, from: data)
print(jsonResult)
} catch {
}