Как мне получить доступ к определенному значению в этом словаре JSON, используя Swift? - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь получить общий выигрыш от этого API (Tracker Network API), и я получил ключ, и он отображает ключ и значение следующим образом.

enter image description here

Код приведен ниже, и я также могу получить количество побед (целое число) вместе с этими значениями (названиями).Тем не менее, я не могу понять, как просто получить номер "Wins", не печатая все остальные номера.

Я пытался

print(statsArray[8])
 totalWins = statsArray[8]
 //["value": 4350, "key": Wins]
 print(totalWins.values)
 //[Wins, 4350]

, но он не печатает его какЯ хотел бы это напечатать.Я хотел бы, чтобы он распечатал как просто число, чтобы я мог затем загрузить это число в UILabel.

Что я спрашиваю, так это как печатать только сумму "Wins" (целое число), а неостальные 11 выходов JSON?Я просто хочу один из номеров.

let epicName = "Ninja"
let formattedName = epicName.replacingOccurrences(of: " ", with: "%20")                   
let platform = "pc"
//pc, xbl, psn


let fortniteChallengesURL3 = URL(string: "https://api.fortnitetracker.com/v1/profile/\(platform)/\(formattedName)")
if let unwrappedURL = fortniteChallengesURL3 {
var request = URLRequest(url: unwrappedURL)
request.addValue("MyKey", forHTTPHeaderField: "TRN-Api-Key")
let dataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in

    if let data = data {
        do {
            let json = try JSONSerialization.jsonObject(with: data) as! [String:Any]
            //print(json)



            for (key, value) in json {


                if (key == "lifeTimeStats") {
                    if let statsArray:[ [String : Any] ] = value as? [ [String : Any] ] {

                        //accessing the 8th but I am getting the output wrong
                        /*let firstKey = Array( (value as? [ [String : Any] ])!)[8]
                        */

                        print(statsArray[8])
                        let totalWins = statsArray[8]
                        //["value": 4350, "key": Wins]
                        print(totalWins.values)
                        //[Wins, 4350]

                        for dict in statsArray {
                            for (key, value) in dict {

                                if (key == "key") {
                                    //print ( "\(firstKey.values)")

                                    print ( "keys are     \(value)")


                                }
                                /*if (key == "value") {
                                    print ( "value are     \(value)")


                                }*/
                            }
                        }

                    }


                }

            }



        } catch let error as NSError {
            print(error.localizedDescription)

            DispatchQueue.main.asyncAfter(deadline: .now() ) {

            }
        }
    }
}
dataTask.resume()
}

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

TotalWins - это словарь с двумя элементами, и вы можете получить доступ к любому значению элемента в словаре по его ключу, поэтому попробуйте следующее:

print(totalWins["value"])
0 голосов
/ 13 октября 2018

Когда вы перебираете каждый элемент в массиве словарей, вы можете напрямую обращаться к ключу и полям значений следующим образом:

for dic in statsArray {
     let title = dic["key"]
     let value = dic["value"] // You can use this as the value for the label
}

Если вы хотите получить доступ только к данным об общих выигрышах, вы можете сделать:

let totalWinsValues = totalWins["value"]

Вы захотите изучить создание модели данных в форме структуры класса и реализацию протокола Codable, чтобы сделать вещи проще и чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...