Swift 4:从JSON文件读取打印文本报错,如何修复?
修复Swift JSON解码的dataCorrupted错误
这个错误我之前也碰到过,问题出在你读取JSON文件的方式上——你现在用Bundle.main.path(forResource:ofType:)拿到的是文件的路径字符串,不是JSON文件的实际内容,直接把路径转成Data的话,解码自然会报错说数据不是有效的JSON。
修复步骤:
- 改用
Bundle.main.url(forResource:withExtension:)获取文件的URL(比路径更可靠,能避免路径编码问题) - 通过
Data(contentsOf:)从URL读取文件的实际内容 - 避免使用强制解包
!,用可选绑定处理可能的空值,防止崩溃
修复后的完整代码:
struct Root : Decodable { let questions : [Question] } struct Question : Decodable { let text1, text2 : String } override func viewDidLoad() { super.viewDidLoad() // 用URL获取文件,避免路径问题 guard let jsonURL = Bundle.main.url(forResource: "3", withExtension: "json") else { print("找不到3.json文件") return } do { // 从URL读取文件实际内容 let data = try Data(contentsOf: jsonURL) let result = try JSONDecoder().decode(Root.self, from: data) for question in result.questions { print("text1: \(question.text1), text2: \(question.text2)") } } catch { print("错误: ", error) } }
额外提醒:
- 永远尽量避免强制解包
!,如果文件不存在或者路径错误,强制解包会直接导致崩溃,用guard let或者if let处理可选值更安全 - 确保
3.json文件确实添加到了你的项目中,并且在Target的Build Phases -> Copy Bundle Resources里能找到它(如果没加进去,也会出现找不到文件的情况)
内容的提问来源于stack exchange,提问作者user8559575
相关产品推荐
相关产品推荐

