ios - 无法使用 Swift 解码 JSON 响应
问题描述
我正在尝试完成一件非常标准的事情:解码 JSON 响应。我可以获得数据,但解码不成功 - 更糟糕的是,没有错误消息。打印语句 1 和 2 输出正确的数据,但我没有从打印语句 3 中得到任何输出,而是输出打印语句 4(例如我的错误消息)。
我希望有人能看到我可能明显的错误,感谢任何可以解决我问题的提示!
菲尔
(编辑)添加 JSON 响应:
[{
"open": {
"price": 122.52,
"time": 1668853732275
},
"close": {
"price": 125.44,
"time": 1658436480762
},
"high": 125.35,
"low": 123.57,
"volume": 75244144,
"symbol": "AAPL"
}]
struct ResponsePrice: Codable {
var results: [ResultPrice]
}
struct ResultPrice: Codable {
var open: ResultPriceTime
var close: ResultPriceTime
var high: Double
var low: Double
var volume: Double
var symbol: String
}
struct ResultPriceTime: Codable {
var price: Double
var time: Double
}
///
struct SymbolView: View {
@State private var results = [ResultPrice]()
var body: some View {
List(resultsPrice, id: \.symbol) { item in
VStack(alignment: .leading) {
Text(item.symbol)
.font(.headline)
Text(item.symbol)
}
}.onAppear(perform: loadData)
}
func loadData() {
guard let url = URL(string: "https://sandbox.iexapis.com/stable/stock/market/ohlc?symbols=aapl&token=Tpk_af03c7f5bac14742a7ce77969a791c66") else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
do {
if let data = data {
//let stringData = String(decoding: data, as: UTF8.self)
//print(stringData)
if let decodedResponse = try JSONDecoder().decode(ResponsePrice.self, from: data) {
// we have good data – go back to the main thread
print("Fetched: \(url)")
DispatchQueue.main.async {
// update our UI
self.results = decodedResponse.results
print("Ticker:\(self.results[0].T)")
}
// everything is good, so we can exit
return
}
}
}
catch {
fatalError("Couldn't parse as :\n\(error)")
}
// if we're still here it means there was a problem
print("4 Decode failed: \(error?.localizedDescription ?? "Unknown error")")
// step 4
}.resume()
}
}
struct SymbolView_Previews: PreviewProvider {
static var previews: some View {
SymbolView()
}
}
解决方案
推荐阅读
- c++ - 虽然这个简单的 C++ 程序打印 2 的幂,但它有这么多问题吗?
- reactjs - 如何在 Reactjs 16.7.0 中使用异步服务器调用
- ms-access - 为什么需要循环来更改 Access VBA 中的记录集?
- javascript - 缩小的 JS 找到并替换一个有效的替代策略?
- angular - Angular 6 属性指令字段未定义
- maven - Artifactory OSS在运行maven release时抛出405异常:执行
- dji-sdk - 矩阵 210 RTK 硬件同步
- html - 如何防止列表中的项目溢出到下一列?
- php - 增加内存限制作曲家
- javascript - 如何使用异步减速器来构建一系列承诺?