【问题标题】:How to use Codable to parse Json如何使用 Codable 解析 Json
【发布时间】:2021-09-05 13:11:04
【问题描述】:

每当我尝试使用 cod-able 解析 json 时,我总是会遇到我的表格视图或集合视图不显示数据的问题。以下面的代码为例;我正在连接到 newsAPI 以在我的表格视图中显示“标题”字段。我在请求函数中设置了我的数据模型以及网络代码。运行代码时显示无值;我该如何解决 ?项目链接:https://github.com/lexypaul13/Nasa

struct ArticleData:Codable{
    var status: String
    var totalResults: String
    var article: [Article]
}
struct Article: Codable {
    var title:String?
    var unwrappeTitle:String{
        return "\(title ?? "No value")"
    } 
}



     func request(){
        
        let website = "https://newsapi.org/v2/everything?q=tesla&from=2021-05-21&sortBy=publishedAt&apiKey=d32071cd286c4f6b9c689527fc195b03"
        if let url = URL.init(string: website){
             let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error)  in
                if  let data = data{
                do {
                    let parsedJsons = try? JSONDecoder().decode(ArticleData.self, from: data )
                    DispatchQueue.main.async {
                        self.information = parsedJsons?.article ?? []
                        self.tableView.reloadData()
                    }
                }catch{
                    print(error)
                }
                }
            })
            task.resume()
        }
    }

【问题讨论】:

  • 你从哪里得到代码?无论是推荐使用try? 的示例,都需要找到并修复。

标签: ios json swift


【解决方案1】:

您应该将您的 try? 更改为 try 以便在出现解码错误时调用您的 catch 块,并且您将获得一些有用的输出。

完成此操作并打印解码错误后,您应该会看到 ArticleData 结构存在一些问题,即 totalResults 应该是 Int 而不是 String,并且 @ 987654329@应该重命名为articles

struct ArticleData: Codable{
    var status: String
    var totalResults: Int
    var articles: [Article]
}

【讨论】:

  • 我希望我知道人们正在使用哪个教程或示例告诉他们使用try ?,这样我们就可以追捕它并杀死它!如果人们使用 try 并打印解码器提供的有用错误,则可以避免 99% 的 Codable 问题。
  • 感谢您的帮助。澄清一下,struct Article Data 中的变量应该具有 json 本身的类型和名称,对吗?
  • @MayowaPaul 没错。如果您想为属性使用不同于 JSON 中的名称的名称,您的结构可以包含一个符合 CodingKeys 协议的枚举,有关更多信息,请参阅标题为 使用编码键选择要编码和解码的属性的部分here.
猜你喜欢
  • 2020-05-30
  • 2018-12-29
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多