Codable を利用して、JSONを 構造体の配列で扱ってみる
JSONのデータにあわせて、Codable クラスの構造体を定義する。
struct HiraganaEntry: Codable {
var word:String
var kana:String
var length:Int
}
カスタムクラスのEntity の配列を定義する
var hiraganaEnties: [HiraganaEntry] = []
Bundle.main.path() でプロジェクト内の JSON ファイルのパスを作成する。
guard let path = Bundle.main.path(forResource: name, ofType: "json") else { return nil }
ファイルパスから UTF-8 で String型で読み込む
let json:String
json = try String(contentsOfFile: path, encoding: .utf8)
JSON(String)を、定義したEntity の配列でデコードする
let entries = try! jsonDecoder.decode([HiraganaEntry].self, from: (json.data(using: .utf8)!))
let jsonDecoder = JSONDecoder()
var hiraganaEnties: [HiraganaEntry] = []
struct HiraganaEntry: Codable {
var word:String
var kana:String
var length:Int
}
func getJSON(name:String) -> Codable? {
let json:String
guard let path = Bundle.main.path(forResource: name, ofType: "json") else { return nil }
do {
json = try String(contentsOfFile: path, encoding: .utf8)
} catch _ {
return nil
}
let entries = try! jsonDecoder.decode([HiraganaEntry].self, from: (json.data(using: .utf8)!))
return entries
}
func loadHiragana() {
hiraganaEnties = getJSON(name: "file_name") as! [GameViewController.HiraganaEntry]
print(hiraganaEnties.randomElement())
}