如何使用 SwiftyJSON 从 JSON.Element 中获取元素
How to get the elements from a JSON.Element with SwiftyJSON
我正在尝试创建一个股票分析警报应用程序,我想从 Alpha Vantage API 的 JSON 响应中获得第一个结果。我使用以下代码来这样做。
@IBAction func saveIsPressed(_ sender: UIButton) {
if let ticker = tickerTextField.text, let indicator = indicatorTextField.text, let timeInterval = timeIntervalTextField.text, let seriesType = seriesTypeTextField.text, let timePeriod = timePeriodTextField.text {
stock.ticker = ticker
stock.indicator = indicator
stock.timeInterval = timeInterval
stock.seriesType = seriesType
stock.timePeriod = timePeriod
print(stock.url)
Alamofire.request(stock.url, method: .get).responseJSON { response in
if response.result.isSuccess {
print("Success")
let stockJSON:JSON = JSON(response.result.value!)
print("Printing JSON")
print(stockJSON)
print("Printing Get Data")
self.getData(json: stockJSON)
} else {
print("Result wasn't a success")
}
}
}
}
func getData(json:JSON){
if let data = json["Technical Analysis: BBANDS"].first {
print(data)
}
}
问题出在 getData 方法上,我只想访问请求中的最新元素,所以我使用 json["Technical Analysis: BBANDS"].first 总是从中获取第一个对象请求,但是在这个对象中,还有我想要访问的其他三个对象。此 JSON API 请求 returns 以下代码:
("2018-04-05 15:45", {
"Real Upper Band" : "1045.9855",
"Real Middle Band" : "1018.0134",
"Real Lower Band" : "990.0413"
})
该结果来自 getDataJSON.first 方法,并且由于我已经访问了请求的第一个元素,所以我想进一步访问它并访问前者中的其他三个元素,即中间, Lower and Upper Bands 对象,但是我找不到这样做的方法,因为它 returns a JSON.Element 不允许下标。获取请求的第一个元素然后访问该第一个元素的元素的最佳方法是什么。
如果我理解正确,你可以这样做:
if let mostRecentElement = json["Technical Analysis: BBANDS"].max(by: { [=10=].0 < .0 }) {
let dateString = mostRecentElement.0
let values = mostRecentElement.1
}
我正在尝试创建一个股票分析警报应用程序,我想从 Alpha Vantage API 的 JSON 响应中获得第一个结果。我使用以下代码来这样做。
@IBAction func saveIsPressed(_ sender: UIButton) {
if let ticker = tickerTextField.text, let indicator = indicatorTextField.text, let timeInterval = timeIntervalTextField.text, let seriesType = seriesTypeTextField.text, let timePeriod = timePeriodTextField.text {
stock.ticker = ticker
stock.indicator = indicator
stock.timeInterval = timeInterval
stock.seriesType = seriesType
stock.timePeriod = timePeriod
print(stock.url)
Alamofire.request(stock.url, method: .get).responseJSON { response in
if response.result.isSuccess {
print("Success")
let stockJSON:JSON = JSON(response.result.value!)
print("Printing JSON")
print(stockJSON)
print("Printing Get Data")
self.getData(json: stockJSON)
} else {
print("Result wasn't a success")
}
}
}
}
func getData(json:JSON){
if let data = json["Technical Analysis: BBANDS"].first {
print(data)
}
}
问题出在 getData 方法上,我只想访问请求中的最新元素,所以我使用 json["Technical Analysis: BBANDS"].first 总是从中获取第一个对象请求,但是在这个对象中,还有我想要访问的其他三个对象。此 JSON API 请求 returns 以下代码:
("2018-04-05 15:45", {
"Real Upper Band" : "1045.9855",
"Real Middle Band" : "1018.0134",
"Real Lower Band" : "990.0413"
})
该结果来自 getDataJSON.first 方法,并且由于我已经访问了请求的第一个元素,所以我想进一步访问它并访问前者中的其他三个元素,即中间, Lower and Upper Bands 对象,但是我找不到这样做的方法,因为它 returns a JSON.Element 不允许下标。获取请求的第一个元素然后访问该第一个元素的元素的最佳方法是什么。
如果我理解正确,你可以这样做:
if let mostRecentElement = json["Technical Analysis: BBANDS"].max(by: { [=10=].0 < .0 }) {
let dateString = mostRecentElement.0
let values = mostRecentElement.1
}