File JSON Operations
Utility functions for reading and writing JSON files to disk.
enum FileOperations {
/// Read JSON file and decode
static func readJSON<T: Decodable>(
from filename: String,
in directory: FileManager.SearchPathDirectory = .documentDirectory
) throws -> T {
let url = try fileURL(for: filename, in: directory)
let data = try Data(contentsOf: url)
return try JSONDecoder().decode(T.self, from: data)
}
/// Write encodable object as JSON
static func writeJSON<T: Encodable>(
_ object: T,
to filename: String,
in directory: FileManager.SearchPathDirectory = .documentDirectory
) throws {
let url = try fileURL(for: filename, in: directory)
let data = try JSONEncoder().encode(object)
try data.write(to: url, options: .atomic)
}
/// Get URL for file in directory
static func fileURL(
for filename: String,
in directory: FileManager.SearchPathDirectory
) throws -> URL {
guard let url = FileManager.default.urls(for: directory, in: .userDomainMask).first else {
throw FileError.directoryNotFound
}
return url.appendingPathComponent(filename)
}
enum FileError: Error {
case directoryNotFound
}
}
// Usage:
// try FileOperations.writeJSON(user, to: "user.json")
// let user: User = try FileOperations.readJSON(from: "user.json")