You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:00:41