Ios 如何使用SwiftyJSON从JSON.Element获取元素
我正在尝试创建一个股票分析警报应用程序,我想从Alpha Vantage API的JSON响应中获得第一个结果。我使用以下代码来实现这一点Ios 如何使用SwiftyJSON从JSON.Element获取元素,ios,json,swift,alamofire,swifty-json,Ios,Json,Swift,Alamofire,Swifty Json,我正在尝试创建一个股票分析警报应用程序,我想从Alpha Vantage API的JSON响应中获得第一个结果。我使用以下代码来实现这一点 @IBAction func saveIsPressed(_ sender: UIButton) { if let ticker = tickerTextField.text, let indicator = indicatorTextField.text, let timeInterval = timeIntervalTextField.
@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”]。首先要始终从请求中获取第一个对象,但是在这个对象中,我还想访问另外三个对象。此JSON API请求返回以下代码:
("2018-04-05 15:45", {
"Real Upper Band" : "1045.9855",
"Real Middle Band" : "1018.0134",
"Real Lower Band" : "990.0413"
})
这个结果来自getDataJSON.first方法,因为我已经访问了请求的第一个元素,所以我想进一步访问它,并访问前一个元素中的其他三个元素,即中间带、下带和上带对象,但是我找不到这样做的方法,因为它返回一个不允许下标的JSON.element。获取请求的第一个元素,然后访问第一个元素的元素的最佳方式是什么 如果我理解正确,你可以这样做:
if let mostRecentElement = json["Technical Analysis: BBANDS"].max(by: { $0.0 < $1.0 }) {
let dateString = mostRecentElement.0
let values = mostRecentElement.1
}
如果让mostRecentElement=json[“技术分析:BBANDS”].max(by:{$0.0<$1.0}){
让dateString=mostRecentElement.0
设值=mostRecentElement.1
}
您确定这是API返回的结果吗?这不是有效的JSON。{“技术分析:BBANDS”:{“2018-04-05 15:45”:{“真实上波段”:“1045.9855”,“真实中波段”:“真实下波段”:“},},}”,元数据:{“8:时区”:“美国\东部时间”,“2:指标”:“布林格波段(BBANDS)”,“1:符号”:“谷歌”,“6.1:上波段的偏差乘数”:2,“6.2:下波段的偏差乘数”:2,“3:上次刷新”:“2018-04-06 16:00:00”,“6.3:MA类型”:0,“4:间隔”:“15分钟”,“5:时间段”:60,“7:系列类型”:“关闭”}
这是它返回的结果,所以当我使用json访问时,[”技术分析:BBANDS“]。首先,它为我提供了整个json代码的第一个元素,它太长了,我真的无法将它全部粘贴,但其想法是在[“技术分析BBANDS”]对象,有很多日期,在这些日期中有三个对象。我想访问最近的日期以及随它们一起出现的三个对象,这样我就可以将它们转换为双倍并保存到我的模型中看起来像是一个带字符串的数组,然后是一个字典?我会尝试json[“Technical Analysis:BBANDS”].first.array
或类似的东西。或者它可能是SwiftyJSON喜欢使用的元组之一。尝试json[“技术分析:BBANDS”]。first.0
和json[“技术分析:BBANDS”]。first.1