2015-10-06 3 views
0

У меня есть API URL, которые возвращают данные в формате JSON, которые вы можете найти здесь https://itunes.apple.com/us/rss/topmovies/limit=25/jsonSwiftyJSON Проблема Swift 2

Я хочу, чтобы вернуть все названия фильмов в этом формате JSON данных.

Я использую SwiftyJSON Framework для анализа данных JSON из URL-адреса. Я использую NSURLSession.dataTask, чтобы начать анализ из URL-адреса.

Проблема в том, что данные JSON, которые я хочу вернуть, ничего не возвращают.

Вот код -

URL

JSON данных -

let url = "https://itunes.apple.com/us/rss/topmovies/limit=25/json" 

Получение JSON данных

func getTheJSONData() throws { 



    let theURL = NSURL(string: url) 

    let request = NSURLRequest(URL: theURL!) 


    //let JSONError : NSError? 



    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 

    let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in 


     do { 

      if error == nil{ 

      let swiftyJSON = JSON(data: data!, options: NSJSONReadingOptions.MutableContainers, error: nil) 

       let Name = swiftyJSON["feed"]["entry"][0]["im:name"]["label"].stringValue 


       //prints nil.. 
       print(Name) 


      } 


     } catch { 
      // report error 

      print(error) 
     } 

} 
    task.resume() 


} 
+0

Я пробовал ваш код и [работал] (https://www.evernote.com/l/AFlfzCDnQ99H9Y9HttHhrhM9x-YEjdUEU10) (Xcode 7.0.1) – Moritz

+0

@EricD. Распечатал ли он список названий фильмов? –

+0

Посмотрите на скриншот, который я связал. Конечно, нет, потому что ваш код запрашивает * один заголовок *. Таким образом, он печатает название. Он не печатает 'nil', как говорит ваш комментарий в коде. – Moritz

ответ

0

Ваш код делает именно то, что он должен: он печатает название фильма ,

С этим:

let Name = swiftyJSON["feed"]["entry"][0]["im:name"]["label"].stringValue 
print(Name) 

вы получите звание одного фильма, потому что вы получаете первый элемент массива с [0].

Поскольку вы хотите получить все названия фильмов, вместо работы с первым элементом, работайте со всеми элементами. Пример:

let swiftyJSON = JSON(data: data!, options: NSJSONReadingOptions.MutableContainers, error: nil) 

let movies = swiftyJSON["feed"]["entry"].arrayValue 

let titles = movies.map { $0["im:name"]["label"].stringValue } 

print(titles) 

print(titles) дает множество названий:

[ "Jurassic мир", "Мстители: Возраст Альтрон", "Шпион", "Entourage", "Пиксели", «Froning »,« Pitch Perfect 2 »,« Земля картеля »,« Aladdin »,« Furious 7 (Extended Edition) »,« Magic Mike XXL »,« \ '71 »,« Age of Adaline »,« Cast Away », «Золушка (2015)», «Сан-Андреас», «Безумный Макс: Фури-роуд», «Отель Трансильвания», «Паддингтон», «Миссия невыполнима - Протокол призраков», «Алоха», «Допинг», «Человек на проводе» »,« Я и граф и умирающая девочка »,« Овернайт »]

Кстати, как компилятор говорит с предупреждением, нет необходимости использовать do catch для JSON(), потому что он не бросает.

+0

Большое вам спасибо! –

+0

Добро пожаловать. – Moritz

Смежные вопросы