[Swift]Documents内のJSONファイルの読み書き

9689 ワード

はじめに

SwiftでDocuments/ディレクトリ内のJSONファイルの読み込み・書き込みについて説明していきます。

環境

  • Xcode 12.5
  • Swift 5.4

[前準備]JSONデータを格納する構造体を定義

struct Bookdata: Codable {
    var id: Int        //本のID
    var title: String  //本のタイトル
    var author: String //本の著者
    var publisher: String //本の出版社
    var comment: String //本のコメント
}

JSONファイルの読み込み

guard let dirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
         fatalError("フォルダURL取得エラー")
}

if !FileManager.default.fileExists(atPath: NSHomeDirectory() + "/Documents/" + "bookdata.json"){
    fatalError("JSONが存在しない")
}

let fileURL = dirURL.appendingPathComponent("bookdata.json")

guard let data = try? Data(contentsOf: fileURL) else {
        fatalError("JSON読み込みエラー")
}
     
let decoder = JSONDecoder()
guard let bookdata = try? decoder.decode([Bookdata].self, from: data) else {
    fatalError("JSONデコードエラー")
}
    
//bookdata[0].titleなどでとり出すことが可能

JSONファイルの書き込み

guard let dirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
    fatalError("フォルダURL取得エラー")
}

let fileURL = dirURL.appendingPathComponent("bookdata.json")

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted //JSONデータを整形する
guard let jsonValue = try? encoder.encode(bookdata) else {
    fatalError("JSONエンコードエラー")
}
 
do {
    try jsonValue.write(to: fileURL)
} catch {
    fatalError("JSON書き込みエラー")
}