JSONデータとは
JSONとは"JavaScript Object Notation"の略で、JavaScriptというプログラミング言語におけるオブジェクトの書き方を参考に作られたデータフォーマット(データの記述形式)のこと。
他の代表的なデータフォーマットとして、CSVやXMLがある。
JSONの特徴は比較的、「読み書きしやすい」、「処理が重くなりづらい」などがある。
記載例
{
{“Number” : 1, “Prefecture” : “Kanagawa”, “Capital” : “Yokohama”},
{“Number” : 2, “Prefecture” : “Aichi”, “Capital” : “Nagoya”},
{“Number” : 3, “Prefecture” : “Hyogo”, “Capital” : “Kobe”},
}
アプリ内に保管されたJSONデータの探索
アプリ内に保管されたJSONデータを読み込むためには、まずは場所を探す必要がある。Bundle.main.urlを使って探索する。
コード
url = Bundle.main.url(forResource: "data", withExtension: "json")
意味
-
Bundle
: アプリケーションやリソースをまとめたディレクトリ -
main
:アプリケーション全体を示す -
url(forResource:withExtension:)
: 指定したリソースファイルのURLを取得するメソッド
データの取得
let data = try Data(contentsOf: url)
Data(contentsOf:)
: ファイルの内容をバイトデータとして読み込みます。urlが指し示すファイルを取得し、データ形式(Data)に変換しています。
try
: このメソッドはエラーをスローする可能性があるため、tryキーワードが必要です。エラーが発生した場合、エラー処理が行われる(呼び出し元にエラーがスローされる)か、do-catchブロックでキャッチされます。
JSONデータのswiftオブジェクトへの変換
JSONデータをSwiftのオブジェクトに変換するためのデコーダーを作成します。
let decoder = JSONDecoder()
JSONDecoder()
: JSON形式のデータをSwiftの型(構造体やクラスなど)に変換するためのクラスです。このデコーダーは、Codableプロトコルに準拠した型を使ってJSONデータをデコード(解析)します。
デコード
let prefectures = try decoder.decode([prefectures].self, from: data)
decoder.decode(_:from:)
: decodeメソッドは、指定された型(ここでは[prefectures].self)にJSONデータを変換します。
from
: dataで指定されたdata(JSONデータ)を解析し、指定した型のオブジェクトに変換します。
エラーハンドリング
下記のようなケースでエラーが発生する可能性があり、エラーが発生した場合はCatch内のコードで処理を実施する。
- 指定されたurlが無効でファイルが存在しない。
- ファイルの中身がJSONフォーマットに準拠していない。
- JSONデータの構造がPlayActivityの構造に合わない。
コード全体
if let url = Bundle.main.url(forResource: "play_activities", withExtension: "json") {
do {
let data = try Data(contentsOf: url)
let decoder = JSONDecoder()
let prefectures = try decoder.decode([prefectures].self, from: data)
return prefectures
} catch {
print("JSONデータの読み込みエラー: \(error)")
}