【发布时间】:2019-08-26 22:43:22
【问题描述】:
多年来,这个问题已经被问过很多次了,但它在 Swift 5 中再次发生了变化,尤其是在最近的两个 beta 版本中。
读取 JSON 文件似乎很简单:
func readJSONFileData(_ fileName: String) -> Array<Dictionary<String, Any>> {
var resultArr: Array<Dictionary<String, Any>> = []
if let url = Bundle.main.url(forResource: "file", withExtension: "json") {
if let data = try? Data(contentsOf: url) {
print("Data raw: ", data)
if let json = try? (JSONSerialization.jsonObject(with: data, options: []) as! NSArray) {
print("JSON: ", json)
if let arr = json as? Array<Any> {
print("Array: ", arr)
resultArr = arr.map { $0 as! Dictionary<String, Any> }
}
}
}
}
return resultArr
}
但是编写起来非常困难,而且在这个网站上找到的所有以前的方法在 Xcode 11 beta 5 和 6 上的 Swift 5 中都失败了。
如何在 Swift 5 中将数据写入 JSON 文件?
我尝试了这些方法:
- How to save an array as a json file in Swift?
- Writing JSON file programmatically swift
- read/write local json file swift 4
除了弃用警告之外没有任何错误,当我修复这些错误时,它根本不起作用。
【问题讨论】:
-
它没有改变。
JSONSerialization和JSONEncoder的两个进程都和以往一样。与其向我们展示可以正常工作的无关“阅读”代码,不如向我们展示不适合您的“写作”代码?或者分享一个或两个链接来表示“在这个网站上找到的所有以前的方法都失败了”。 -
不用说,如果您要使用抛出错误的方法,请使用
try而不是try?,将其包装在do-catch中,然后打印@ 987654336@ 在catch。错误抛出系统会准确地告诉你出了什么问题。也许您正在尝试保存到捆绑包(只读)。也许您尝试转换的对象具有一些无法在 JSON 中表示的属性/值。在没有reproducible example 的情况下是不可能说的。但是,如果你没有发现错误,那你就瞎了眼。 -
“假设我有一些 JSON 数据 - 我将如何将其写入 file.json?”一些JSON是什么意思?是字典还是纯文本?
-
@JackBashford 如果您编辑您的问题以显示您的尝试并解释发生了什么而不是简单地链接到其他问题/答案会更好
标签: ios swift xcode filesystems xcode11