Нужна помощь в заполнении массива данными JSON с использованием SwiftyJSON - PullRequest
0 голосов
/ 30 июня 2018

Я хочу заполнить свой массив данными JSON. Я использую SwiftyJSON и Alamofire. Я новичок в разборе JSON, поэтому я прошу прощения за любое невежество на моем конце. URL-адрес ниже - это URL, который я вставляю в getAllTimeAverage (). Любая помощь будет потрясающей! спасибо!

Это данные JSON https://apiv2.bitcoinaverage.com/indices/global/history/BTCILS?period=alltime&format=json

Это массив, который я хочу заполнить

var allTimeAverages: [Any] = []

Это мои функции. Я вызываю их в моем cellForRowAt :, когда я печатаю allTimeAverages.count, я возвращаюсь к нулю.

 func getAllTimeAverage(url: String) {
    Alamofire.request(url, method: .get)
        .responseJSON { response in
            if response.result.isSuccess {

                print("Sucess! Got the Bitcoin Data")
                let bitcointJSON : JSON = [JSON(response.result.value!)]

                self.updateAverageAllTime(json: bitcointJSON)

            } else {
                print("Error: \(String(describing: response.result.error))")
                self.price = "Connection Issues"
            }
    }
}
func updateAverageAllTime(json: JSON) {
    if let allTimeAverage = json["average"].dictionaryObject {
        self.allTimeAverages.append(allTimeAverage)
    }
}


func getBitcoinData(url: String) {
    Alamofire.request(url, method: .get)
        .responseJSON { response in
            if response.result.isSuccess {

                print("Sucess! Got the Bitcoin Data")
                let bitcointJSON : JSON = JSON(response.result.value!)

                self.updateBitcoinData(json: bitcointJSON)

            } else {
                print("Error: \(String(describing: response.result.error))")
                self.price = "Connection Issues"
            }
    }



}

1 Ответ

0 голосов
/ 30 июня 2018

Вот пример того, как это сделать (я взял несколько значений из API JSON, которым вы поделились):

    let jsonString = "[{\"high\": 23043.41,\"open\": 21494.60,\"low\": 21338.34,\"average\": 21668.01,\"time\": \"2018-06-29 00:00:00\",\"volume\": 102148.30132998565},{\"high\": 22488.75,\"open\": 22405.51,\"low\": 21380.97,\"average\": 22241.29,\"time\": \"2018-06-28 00:00:00\",\"volume\": 69383.44795111718},{\"high\": 22491.85,\"open\": 22169.36,\"low\": 21940.47,\"average\": 22224.29,\"time\": \"2018-06-27 00:00:00\",\"volume\": 69884.07809550199},{\"high\": 22707.46,\"open\": 22635.32,\"low\": 22004.29,\"average\": 22480.86,\"time\": \"2018-06-26 00:00:00\",\"volume\": 71611.8914173987}]";

    if let jsonData = jsonString.data(using: .utf8, allowLossyConversion: false) {
        let json = JSON(data: jsonData)
        let jsonArray = json.arrayValue

        let averagesArray = jsonArray.map{ $0["average"].doubleValue}
        let highArray = jsonArray.map{ $0["high"].doubleValue}
        let lowArray = jsonArray.map{ $0["low"].doubleValue}
        let volumeArray = jsonArray.map{ $0["volume"].doubleValue}
        let openArray = jsonArray.map{ $0["open"].doubleValue}

    }

Заставляем ваше решение работать в соответствии с вышеизложенным : В следующей строке удалите [], поскольку вы уже получаете массив из API.

let bitcoinJSON : JSON = [JSON(response.result.value!)]

так что строка выше станет

let bitcoinJSON : JSON = JSON(response.result.value!)

Теперь вы можете получить значение массива, как я сделал:

let jsonArray = bitcoinJSON.arrayValue

и теперь вы можете использовать оставшуюся часть кода (повторяется ниже):

    let averagesArray = jsonArray.map{ $0["average"].doubleValue}
    let highArray = jsonArray.map{ $0["high"].doubleValue}
    let lowArray = jsonArray.map{ $0["low"].doubleValue}
    let volumeArray = jsonArray.map{ $0["volume"].doubleValue}
    let openArray = jsonArray.map{ $0["open"].doubleValue}
...