ios - 使用 Swift 解包 Yahoo API

标签 ios json swift

我正在尝试以 JSON 格式从 Yahoo finance API 获取 PriceChange 数据。 Apple Stock API

然而,在解包数据时存在一些问题。该程序在执行 for jsonObjectString in resultArray! 时显示问题。我怀疑它没有找到数据,因为调试期间的错误是fatal error: unexpectedly found nil while unwrapping an Optional value

func GetPrice(){
    let session = NSURLSession.sharedSession()
    let request = NSMutableURLRequest(URL: NSURL(string: "https://query.yahooapis.com/v1/public/yql?q=select%20price%2C%20change%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes.csv%3Fs%3DA17U.SI%26f%3Dsl1d1t1c1ohgv%26e%3D.csv'%20and%20columns%3D'symbol%2Cprice%2Cdate%2Ctime%2Cchange%2Ccol1%2Chigh%2Clow%2Ccol2'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys")!)
    request.HTTPMethod = "GET"

    let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in

        if let error = error {
            print(error)
        }
        if let data = data{
            do{
                let resultJSON = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())
                let resultArray = resultJSON as? NSArray
                for jsonObjectString in resultArray!{
                    let price = jsonObjectString["price"] as! String
                    let change = jsonObjectString["change"] as! String
                    self.priceList.append(PriceTable(stockCode: self.blueChipList[self.index].stockName, price: price, change: change))
                }
                dispatch_async(dispatch_get_main_queue(), {self.tableView.reloadData()})

            }catch _{
                print("Received not-well-formatted JSON")
            }

        }
        if let response = response {
            let httpResponse = response as! NSHTTPURLResponse
            print("response code = \(httpResponse.statusCode)")
        }
    })
    task.resume()
}

最佳答案

resultJSON 是字典,这就是当您将其转换为 NSArray 时它返回 nil 的原因。

如果您想获取价格和零钱的值(value),请试试这个。

let resultDict = resultJSON as? NSDictionary
let queryDict = resultDict["query"]
let resultsDict = queryDict["results"]
let rowDict = resultsDict["row"]
let price = rowDict["price"] as! String
let change = rowDict["change"] as! String

关于ios - 使用 Swift 解包 Yahoo API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929967/

相关文章:

ios - 显示键盘时 WKWebView 出现约束问题

ios - Swift Firebase Cloud Messaging - 在后台发送上游消息

javascript - 如何向 API 发出 jquery http post 请求?

swift 用户界面。如何更改 TextField 的占位符颜色?

ios - iOS上的数据共享

ios - 应用程序终止时发送 HTTP POST

ios - 如果应用程序已从iOS中从后台删除,将会调用performFetchWithCompletionHandler吗?

ios - 如何在 Swift 中使用 URLSession 添加 UIActivityIndi​​catorView?

JSON 未定义值类型

ios - 使用 Swift 从 HealthKit 读取日期间隔的步骤