カテゴリー
iOS Swift

JSONをパースし、オブジェクトとして使用する

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 {
			
}