[英]Unable to write an encoded json Data object to a local file in Swift 5
[英]swift - Save JSON data to local file
我從 Reddit API 收到帖子。 我想對收到的 JSON 進行編碼並將其寫入本地文件。 但是在向其寫入數據后,文件為空。 請建議我如何將編碼的 JSON 數據寫入文件或漂亮的 JSON 數據。
class Utils {
func saveToJSON() {
UseCase().createPosts(sub: "ios", limit: 5, completion: { posts in
print(posts)
let filePath = self.getDocumentsDirectoryUrl().appendingPathComponent("landmarkData.json")
print(filePath)
do {
let jsonData = try JSONEncoder().encode(posts)
print(jsonData)
try jsonData.write(to: filePath)
// here landmarkData.json file is empty
} catch {
print("Error writing to JSON file: \(error)")
}
})
}
func getDocumentsDirectoryUrl() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let documentsDirectory = paths[0]
return documentsDirectory
}
}
struct RedditPost: Hashable, Codable, Identifiable {
var username: String
var createdHoursAgo: String
var domain: String
var title: String
var text: String
var imageURL: String
var downs: Int
var ups: Int
var rating: Int { ups - downs }
var comments: Int
var saved: Bool = false
var id: String
}
class UseCase {
func createPosts(sub: String, limit: Int, completion: (@escaping (_ data: [RedditPost]) -> Void)) {
Repository().fillPostsArray(sub: sub, limit: limit) { (redditPosts: [RedditPost]) in
DispatchQueue.main.async {
completion(redditPosts)
}
}
}
}
//Define globally..
let fileName = "landmarkData.json"
func saveToJSON() {
UseCase().createPosts(sub: "ios", limit: 5, completion: { posts in
print(posts)
let filePath = self.getDocumentsDirectoryUrl().appendingPathComponent(fileName)
print(filePath)
do {
let jsonData = try JSONEncoder().encode(posts)
print(jsonData)
try jsonData.write(to: filePath)
// here landmarkData.json file is empty
} catch {
print("Error writing to JSON file: \(error)")
}
})
}
然后在讀取文件時使用相同的常量...
func readFromJson() {
let filePath = self.getDocumentsDirectoryUrl().appendingPathComponent(fileName)
print(filePath)
do {
let jsonData = try JSONDecoder().decode(posts)
print(jsonData)
} catch {
print("Error reading from JSON file: \(error)")
}
}
我推薦的是使用 Codable 對象,這意味着您可以更高效、更輕松地編寫/保存 json 數據文件並加載回 Codable 對象。
由於代碼行長,我在此處鏈接 GitHub 要點以查看支持此功能的完整 class。
要點: https://gist.github.com/egzonpllana/372d8e8733d90a013532d7377284d70c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.