【问题标题】:Unable to Parse JSON With Codeable无法使用 Codeable 解析 JSON
【发布时间】: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的方式?

【问题讨论】:

标签: json swift jsondecoder


【解决方案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 只是结构的名称还是有不同的用途?
猜你喜欢
  • 1970-01-01
  • 2020-12-02
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多