无法使用 Codeable 解析 JSON
Posted
技术标签:
【中文标题】无法使用 Codeable 解析 JSON【英文标题】:Unable to Parse JSON With Codeable 【发布时间】:2019-05-21 18:09:20 【问题描述】:我正在尝试了解 Apple 的 Codeable 函数来解析 JSON。我正在关注 youtube 上的教程,这是代码:
override func viewDidLoad()
super.viewDidLoad()
struct Forex: Decodable
let open: Int?
let close: Int?
let high: Int?
let jsonUrlString = "https://www.alphavantage.co/query?function=FX_INTRADAY&from_symbol=EUR&to_symbol=USD&interval=5min&apikey=demo"
let urlObj = URL(string: jsonUrlString)
URLSession.shared.dataTask(with: urlObj!) (data, response, error) in
do
let forex = try JSONDecoder().decode([Forex].self, from: data)
catch
当我尝试构建时,我面临 6 个不同的错误: Error Image
当我从 XCode 应用建议的修复程序时,它并没有解决问题和视频,这个人能够在没有这些错误的情况下构建。
谁能告诉我哪里出错了或者苹果改变了你使用可编码解析json的方式?
【问题讨论】:
删除error)
和in
之间的
。
JSON 中根本没有数组。相关:***.com/questions/51863329/…
【参考方案1】:
根据您的尝试,您的根目录是具有 2 个键的字典,您需要 timeSeriesFX5Min
键
class VCName:UIViewController
override func viewDidLoad()
super.viewDidLoad()
let jsonUrlString = "https://www.alphavantage.co/query?function=FX_INTRADAY&from_symbol=EUR&to_symbol=USD&interval=5min&apikey=demo"
let urlObj = URL(string: jsonUrlString)
URLSession.shared.dataTask(with: urlObj!) (data, response, error) in
guard let data = data else return
do
let forex = try JSONDecoder().decode(Root.self, from: data)
print(forex.timeSeriesFX5Min)
catch
print(error)
.resume()
struct Root: Codable
let timeSeriesFX5Min: [String:Forex]
enum CodingKeys: String, CodingKey
case timeSeriesFX5Min = "Time Series FX (5min)"
// MARK: - TimeSeriesFX5Min
struct Forex: Codable
let the1Open, the2High, the3Low, the4Close: String
enum CodingKeys: String, CodingKey
case the1Open = "1. open"
case the2High = "2. high"
case the3Low = "3. low"
case the4Close = "4. close"
【讨论】:
让我看看我是否正确:您将时间序列映射到 timeSeriesFX5Min,因为它们在代码中没有与此匹配的关键字,然后对开盘、高、低、收盘执行相同操作。我还意识到您删除了导致错误的 'error) in' 处的 大括号。关键字 Root 只是结构的名称还是有不同的用途?以上是关于无法使用 Codeable 解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 JSON.parse 解析来自 textarea 元素的有效 JSON
无法使用 sparkDataframe 获取 Json 列:org.apache.spark.sql.AnalysisException:无法解析 'explode;
无法使用 Google 存储桶中的 Biquery 解析 JSON