Проблемы с получением данных из API TheMovieDB с помощью Swift JSON - PullRequest
0 голосов
/ 11 мая 2018

Я новичок в использовании JSON и хотел начать с простого приложения, чтобы обеспечить обзор фильма при вводе названия.Мой код ниже возвращает все в одной большой строке.Как получить только один фрагмент информации, такой как обзор или год?

С моей следующей попыткой print (obj ["Overview" как Any)) печатает "nil", а print (obj) выглядит следующим образом:

{
page = 1;
results =     (
            {
        adult = 0;
        "backdrop_path" = "/A0aGxrCGRBuCrDltGYiKGeAUect.jpg";
        "genre_ids" =             (
            53,
            80
        );
        id = 680;
        "original_language" = en;
        "original_title" = "Pulp Fiction";
        overview = "A burger-loving hit man, his philosophical partner, a drug-addled gangster's moll and a washed-up boxer converge in this sprawling, comedic crime caper. Their adventures unfurl in three stories that ingeniously trip back and forth in time.";

Текущий код:

    let query = "Pulp+Fiction"
    let urlString = "https://api.themoviedb.org/3/search/movie?api_key={MYAPIKEY}&query=\(query)"

    let url = URL(string: urlString)
    URLSession.shared.dataTask(with:url!) { (data, response, error) in
        if error != nil {
            print(error as Any)
        } else {
            do {
                let parsedData = try JSONSerialization.jsonObject(with: data!) as Any
                if let obj = parsedData as? NSDictionary {

                    print(obj["overview"] as Any)
                    print(obj)

                }
            } catch {
                print("error")
            }            }
        }.resume()
}

Ответы [ 2 ]

0 голосов
/ 11 мая 2018
    // write this extension anywhere in your any swift file
    extension String{
         func toDictionary() -> NSDictionary {
          let blankDict : NSDictionary = [:]
         if let data = self.data(using: .utf8) {
            do {
               return try JSONSerialization.jsonObject(with: data, options: []) as! NSDictionary
                       } catch {
                            print(error.localizedDescription)
                        }
                    }
                    return blankDict
                }
            }
      //now  in your code modify as 
        if  data != nil {
                        let responseString = String(data: data!, encoding: .utf8)!
                        if(responseString != "")
                        {
                         //convert response string into dictionary using extended method
                         let responseValues = responseString.toDictionary()
                         //access value using keyPath using
                         let value = responseValues.value(forKeyPath: "key.key2")
//where key2 is the target key which is inside the value of key 
                     }
        }
0 голосов
/ 11 мая 2018

Прежде всего, результаты JSON никогда не бывают Any. Как уже упоминалось в комментариях, корневым объектом является словарь

if let parsedData = try JSONSerialization.jsonObject(with: data!) as? [String:Any],

Ключ overview находится в массиве для ключа results

   let results = parsedData["results"] as? [[String:Any]] {

Вы должны перебрать массив, чтобы получить значения для ключа overview

      for result in results {
          print(result["overview"] as? String ?? "no value for key overview") 
      }
}

Настоятельно рекомендуется использовать протокол Codable и пользовательские структуры в Swift 4.

...