私はJSONファイルを持っていますポイント.json次のような読み取り関数もあります。
private func readJson() {
let file = Bundle.main.path(forResource: "points", ofType: "json")
let data = try? Data(contentsOf: URL(fileURLWithPath: file!))
let jsonData = try? JSONSerialization.jsonObject(with: data!, options: []) as! [String:Any]
print(jsonData)
}
動作しません。何か助けはありますか?
ベストアンサー1
ここでの問題は、値を強制的にアンラップし、エラーが発生した場合にそれがどこから来たのか分からないことです。
代わりに、エラーを処理し、オプションを安全にアンラップする必要があります。
@vadian がコメントで正しく指摘しているように、 を使用する必要がありますBundle.main.url
。
private func readJson() {
do {
if let file = Bundle.main.url(forResource: "points", withExtension: "json") {
let data = try Data(contentsOf: file)
let json = try JSONSerialization.jsonObject(with: data, options: [])
if let object = json as? [String: Any] {
// json is a dictionary
print(object)
} else if let object = json as? [Any] {
// json is an array
print(object)
} else {
print("JSON is invalid")
}
} else {
print("no file")
}
} catch {
print(error.localizedDescription)
}
}
Swift でコーディングする場合、通常は!
コード臭がします。もちろん例外 (IBOutlet など) もありますが、強制アンラップは使用せず!
、常に安全にアンラップするようにしてください。