【问题标题】:How to get the elements from a JSON.Element with SwiftyJSON如何使用 SwiftyJSON 从 JSON.Element 中获取元素
【发布时间】:2023-04-05 00:34:01
【问题描述】:

我正在尝试创建一个股票分析警报应用程序,并且我想从 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: BANDS"].first 总是从请求中获取第一个对象,但是在这个对象,还有其他三个我想要访问的对象。此 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。获取请求的第一个元素然后访问该第一个元素的元素的最佳方法是什么。

【问题讨论】:

  • 您确定这是 API 返回的内容吗?这不是有效的 JSON。
  • { "Technical Analysis: BBANDS" : { "2018-04-05 15:45" : { "Real Upper Band" : "1045.9855", "Real Middle Band" : "", "Real Lower Band" : "" }, }, "Meta Data" : { "8: Time Zone" : "US\/Eastern Time", "2: Indicator" : "Bollinger Bands (BBANDS)", "1: Symbol" : "GOOG", "6.1: Deviation multiplier for upper band" : 2, "6.2: Deviation multiplier for lower band" : 2, "3: Last Refreshed" : "2018-04-06 16:00:00", "6.3: MA Type" : 0, "4: Interval" : "15min", "5: Time Period" : 60, "7: Series Type" : "close" } }
  • 这就是它返回的内容,所以当我使用 json["Technical Analysis: BANDS"].first 访问时,它让我获得了整个 json 代码的第一个元素,它太长了,我真的不能t 全部粘贴,但想法是在 ["Technical Analysis BANDS"] 对象中,有很多日期,在这些日期中有三个对象。我想访问最近的日期和它们附带的三个对象,以便我可以将它们转换为双精度并将它们保存到我的模型中
  • 看起来像一个包含字符串和字典的数组?我会先试试json["Technical Analysis: BBANDS"].first.array 或类似的东西。
  • 或者它可能是 SwiftyJSON 喜欢使用的元组之一。试试json["Technical Analysis: BBANDS"].first.0json["Technical Analysis: BBANDS"].first.1

标签: ios json swift alamofire swifty-json


【解决方案1】:

如果我理解正确,你可以这样做:

if let mostRecentElement = json["Technical Analysis: BBANDS"].max(by: { $0.0 < $1.0 }) {
    let dateString = mostRecentElement.0
    let values = mostRecentElement.1
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多