Swift 3에서 JSON 파일 읽기
points.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)
}
효과가 없어요, 도움이 필요하세요?
여기서의 문제는 값을 강제로 풀어서 에러가 발생했을 경우 그 출처를 알 수 없다는 것입니다.
대신 오류를 처리하고 옵션을 안전하게 풀어야 합니다.
그리고 @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로 코딩할 때,!
코드 냄새입니다.물론 예외(IBOutlets 및 기타)도 있지만 강제 언랩은 사용하지 않도록 합니다.!
항상 안전하게 개봉하세요.
다음 Swift 5/iOS 12.3 코드는 옵션의 값을 강제 언랩하지 않고 잠재적인 오류를 완만하게 처리하는 방법을 다시 쓸 수 있음을 보여줍니다.
import Foundation
func readJson() {
// Get url for file
guard let fileUrl = Bundle.main.url(forResource: "Data", withExtension: "json") else {
print("File could not be located at the given url")
return
}
do {
// Get data from file
let data = try Data(contentsOf: fileUrl)
// Decode data to a Dictionary<String, Any> object
guard let dictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else {
print("Could not cast JSON content as a Dictionary<String, Any>")
return
}
// Print result
print(dictionary)
} catch {
// Print error if something went wrong
print("Error: \(error)")
}
}
언급URL : https://stackoverflow.com/questions/40438784/read-json-file-with-swift-3
'programing' 카테고리의 다른 글
cx_Oracle:결과 세트를 반복하려면 어떻게 해야 합니까? (0) | 2023.03.31 |
---|---|
Json의 getString()과 optString()의 차이점 (0) | 2023.03.31 |
Enum이 있는 Spring의 @RequestParam (0) | 2023.03.31 |
Angular를 사용한 $http 동기 호출 방법JS (0) | 2023.03.31 |
정의되지 않은 속성 '이력'을 읽을 수 없습니다(React Router 5의 useHistory hook). (0) | 2023.03.31 |