#1. 将Swift Array
保存为json文件
下面是Swift 3 / iOS 10代码示例,展示了如何将一个Array
实例转换为json数据,并使用FileManager
和JSONSerialization
将其保存到iPhone文档目录中的json文件中:
func saveToJsonFile() {
guard let documentDirectoryUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let fileUrl = documentDirectoryUrl.appendingPathComponent("Persons.json")
let personArray = [["person": ["name": "Dani", "age": "24"]], ["person": ["name": "ray", "age": "70"]]]
do {
let data = try JSONSerialization.data(withJSONObject: personArray, options: [])
try data.write(to: fileUrl, options: [])
} catch {
print(error)
}
}
作为替代方案,您可以实现使用流的以下代码:
func saveToJsonFile() {
guard let documentDirectoryUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let fileUrl = documentDirectoryUrl.appendingPathComponent("Persons.json")
let personArray = [["person": ["name": "Dani", "age": "24"]], ["person": ["name": "ray", "age": "70"]]]
guard let stream = OutputStream(toFileAtPath: fileUrl.path, append: false) else { return }
stream.open()
defer {
stream.close()
}
var error: NSError?
JSONSerialization.writeJSONObject(personArray, to: stream, options: [], error: &error)
if let error = error {
print(error)
}
}
#2. 从json文件获取一个Swift Array
下面是Swift 3 / iOS 10代码示例,演示如何从iPhone文档目录中的json文件获取数据,并使用FileManager
和JSONSerialization
将其转换为Array
实例:
func retrieveFromJsonFile() {
guard let documentsDirectoryUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let fileUrl = documentsDirectoryUrl.appendingPathComponent("Persons.json")
do {
let data = try Data(contentsOf: fileUrl, options: [])
guard let personArray = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: [String: String]]] else { return }
print(personArray)
} catch {
print(error)
}
}
作为替代方案,您可以实现以下使用流的代码:
func retrieveFromJsonFile() {
guard let documentsDirectoryUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let fileUrl = documentsDirectoryUrl.appendingPathComponent("Persons.json")
guard let stream = InputStream(url: fileUrl) else { return }
stream.open()
defer {
stream.close()
}
do {
guard let personArray = try JSONSerialization.jsonObject(with: stream, options: []) as? [[String: [String: String]]] else { return }
print(personArray)
} catch {
print(error)
}
}
位于 Github 上的
Save-and-read-JSON-from-Playground 存储库中的 Playground 展示了如何将 Swift 的
Array
保存成 json 文件以及如何读取 json 文件并获取其中的 Swift
Array
。