2016-10-20 6 views
0

Swift 3.0を使用してiTunes APIからJSONで解析されたアイテムにアクセスしようとしていますが、解析されたオブジェクトにアクセスするのに苦労しています。オブジェクトがこの形式で解析されている:Swift 3.0のiTunes APIから解析されたJSONオブジェクトへのアクセス

{ 
resultCount = 50; 
results =  (
      { 
     artistId = 70936; 
     artistName = "Johnny Cash"; 
     artistViewUrl = "https://itunes.apple.com/us/artist/johnny-cash/id70936?uo=4"; 
     artworkUrl100 = "http://is2.mzstatic.com/image/thumb/Music3/v4/13/ae/73/13ae735e-33d0-1480-f51b-4150d4a45696/source/100x100bb.jpg"; 
     artworkUrl30 = "http://is2.mzstatic.com/image/thumb/Music3/v4/13/ae/73/13ae735e-33d0-1480-f51b-4150d4a45696/source/30x30bb.jpg"; 
     artworkUrl60 = "http://is2.mzstatic.com/image/thumb/Music3/v4/13/ae/73/13ae735e-33d0-1480-f51b-4150d4a45696/source/60x60bb.jpg"; 
     collectionCensoredName = "The Essential Johnny Cash"; 
     collectionExplicitness = notExplicit; 
     collectionId = 251001680; 
     collectionName = "The Essential Johnny Cash"; 
     collectionPrice = "14.99"; 
     collectionViewUrl = "https://itunes.apple.com/us/album/ring-of-fire/id251001680?i=251002253&uo=4"; 
     country = USA; 
     currency = USD; 
     discCount = 2; 
     discNumber = 1; 
     isStreamable = 1; 
     kind = song; 
     previewUrl = "http://a1144.phobos.apple.com/us/r1000/070/Music/b3/99/be/mzi.qvkhtgfg.aac.p.m4a"; 
     primaryGenreName = Country; 
     releaseDate = "2002-02-12T08:00:00Z"; 
     trackCensoredName = "Ring of Fire"; 
     trackCount = 18; 
     trackExplicitness = notExplicit; 
     trackId = 251002253; 
     trackName = "Ring of Fire"; 
     trackNumber = 15; 
     trackPrice = "1.29"; 
     trackTimeMillis = 155707; 
     trackViewUrl = "https://itunes.apple.com/us/album/ring-of-fire/id251001680?i=251002253&uo=4"; 
     wrapperType = track; 
    }, 

私は、例えば、そのようなartistNameように、すべての50件の結果からの情報にアクセスできるようにします。これは、私の構文解析関数は、artistNameを取得し、それを私のNSDictionaryに追加しようとしていますが、それは辞書をアンラップすることができないことを返し続けます。

func parser() { 
    let enteredText:String = (tbxSearch.text?.replacingOccurrences(of: " ", with: "+"))! 
    let url = "https://itunes.apple.com/search?term=\(enteredText)" 
    print(url) 
    guard let urlRequest = URL(string: url) else 
    { 
     print("Error creating endpoint") 
     return 
    } 
    let request = URLRequest(url: urlRequest) 
    URLSession.shared.dataTask(with: request) {(data,response,error) in 
     do 
     { 
      guard let data = data else 
      { 
       return 
      } 
      guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary else 
      { 
       return 
      } 
      if let results = json["results"] as? NSDictionary 
      { 
       self.avObjects.avDict.setValue("Artist Name", forKey: results["artistName"] as! String) 
       print(self.avObjects.avDict) 
      } 
      else 
      { 
       print("Couldn't unwrap the dictionary.") 
      } 
      print(json) 
     } 
     catch let error as NSError 
     { 
      print(error.debugDescription) 
     } 
    }.resume() 
} 

答えて

0

resultsは、辞書だけでなく、辞書の配列です。

の代わりに、この:あなたはその後、例えば、それぞれ1から"artistName"を抽出し、配列の各要素をマップしたり、反復処理ができif let results = json["results"] as? NSArray

if let results = json["results"] as? NSDictionary

はこれを試してみてください。

0

resultsは辞書自体ではなく、辞書の配列です。

if let results = json["results"] as? NSDictionary 

if let results = json["results"] as? NSArray 

、その後、結果を反復処理これを変更してみてください。結果の各要素は、artistNameなどの属性を持つ辞書です。

+0

この後、辞書の値を設定しようとすると、String型の値を予想される引数型Intに変換できないというエラーが表示されます。 – CsCody

関連する問題