2014-10-11 208 views
0

JSON:進入JSON目錄?

{"status":"ok","count":4,"count_total":4,"pages":1,"posts":[{"id":15,"type":"post","slug":"sg-and-t13-friends-again","url":"http:\/\/example.com.com\/instanews\/sg-and-t13-friends-again\/","status":"publish","title":"SG and T13 friends again","title_plain":"SG and T13 friends again","content":"<p>again?<\/p>\n","excerpt":"<p>again?<\/p>\n","date":"2014-10-08 20:28:52","modified":"2014-10-08 20:28:52","categories":[{"id":2,"slug":"selena-gomez","title":"Selena Gomez","description":"","parent":0,"post_count":3},{"id":3,"slug":"taylor-swift","title":"Taylor Swift","description":"","parent":0,"post_count":2}],"tags":[],"author":{"id":1,"slug":"admin","name":"admin","first_name":"","last_name":"","nickname":"admin","url":"","description":""},"comments":[],"attachments":[{"id":16,"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500.png","slug":"tumblr_nc5rkwqj1r1tv3z6lo1_500","title":"tumblr_nc5rkwQj1R1tv3z6lo1_500","description":"","caption":"","parent":15,"mime_type":"image\/png","images":{"full":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500.png","width":500,"height":630},"thumbnail":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-150x150.png","width":150,"height":150},"medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-238x300.png","width":238,"height":300},"large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500.png","width":500,"height":630},"vw_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-360x200.png","width":360,"height":200},"vw_square_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-360x360.png","width":360,"height":360},"vw_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-500x420.png","width":500,"height":420},"vw_square_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500.png","width":500,"height":630},"vw_large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500.png","width":500,"height":630}}}],"comment_count":0,"comment_status":"open","thumbnail":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-150x150.png","custom_fields":{"vw_review_average_score":["0"],"vw_post_featured":["0"],"vw_post_layout":["right"],"vw_enable_review":["0"]},"thumbnail_size":"thumbnail","thumbnail_images":{"full":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500.png","width":500,"height":630},"thumbnail":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-150x150.png","width":150,"height":150},"medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-238x300.png","width":238,"height":300},"large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500.png","width":500,"height":630},"vw_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-360x200.png","width":360,"height":200},"vw_square_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-360x360.png","width":360,"height":360},"vw_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500-500x420.png","width":500,"height":420},"vw_square_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500.png","width":500,"height":630},"vw_large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_nc5rkwQj1R1tv3z6lo1_500.png","width":500,"height":630}}},{"id":9,"type":"post","slug":"selena-gomez-new-trailer","url":"http:\/\/example.com.com\/instanews\/selena-gomez-new-trailer\/","status":"publish","title":"Selena Gomez new trailer","title_plain":"Selena Gomez new trailer","content":"<p>Not really\u00a0&#8220;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&#8221;<\/p>\n","excerpt":"<p>Not really\u00a0&#8220;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, &#8230;<\/p>\n","date":"2014-10-08 20:22:02","modified":"2014-10-08 20:25:19","categories":[{"id":2,"slug":"selena-gomez","title":"Selena Gomez","description":"","parent":0,"post_count":3}],"tags":[],"author":{"id":1,"slug":"admin","name":"admin","first_name":"","last_name":"","nickname":"admin","url":"","description":""},"comments":[],"attachments":[{"id":11,"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842.jpg","slug":"img_1842","title":"IMG_1842","description":"","caption":"","parent":9,"mime_type":"image\/jpeg","images":{"full":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842.jpg","width":1280,"height":1024},"thumbnail":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-150x150.jpg","width":150,"height":150},"medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-300x240.jpg","width":300,"height":240},"large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-1024x819.jpg","width":1024,"height":819},"vw_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-360x200.jpg","width":360,"height":200},"vw_square_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-360x360.jpg","width":360,"height":360},"vw_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-750x420.jpg","width":750,"height":420},"vw_square_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-750x750.jpg","width":750,"height":750},"vw_large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-1140x641.jpg","width":1140,"height":641}}}],"comment_count":0,"comment_status":"open","thumbnail":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-150x150.jpg","custom_fields":{"vw_review_average_score":["0"],"vw_post_featured":["0"],"vw_post_layout":["right"],"vw_enable_review":["0"]},"thumbnail_size":"thumbnail","thumbnail_images":{"full":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842.jpg","width":1280,"height":1024},"thumbnail":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-150x150.jpg","width":150,"height":150},"medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-300x240.jpg","width":300,"height":240},"large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-1024x819.jpg","width":1024,"height":819},"vw_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-360x200.jpg","width":360,"height":200},"vw_square_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-360x360.jpg","width":360,"height":360},"vw_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-750x420.jpg","width":750,"height":420},"vw_square_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-750x750.jpg","width":750,"height":750},"vw_large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/IMG_1842-1140x641.jpg","width":1140,"height":641}}},{"id":7,"type":"post","slug":"taylor-swift-new-album","url":"http:\/\/example.com.com\/instanews\/taylor-swift-new-album\/","status":"publish","title":"Taylor Swift new album","title_plain":"Taylor Swift new album","content":"<p>3 weeks!\u00a0Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.<\/p>\n<p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<\/p>\n","excerpt":"<p>3 weeks!\u00a0Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, &#8230;<\/p>\n","date":"2014-10-08 20:21:20","modified":"2014-10-08 20:27:44","categories":[{"id":3,"slug":"taylor-swift","title":"Taylor Swift","description":"","parent":0,"post_count":2}],"tags":[],"author":{"id":1,"slug":"admin","name":"admin","first_name":"","last_name":"","nickname":"admin","url":"","description":""},"comments":[],"attachments":[{"id":14,"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500.jpg","slug":"tumblr_ncqmsrndkv1rx2xpto1_500","title":"tumblr_ncqmsrndkV1rx2xpto1_500","description":"","caption":"","parent":7,"mime_type":"image\/jpeg","images":{"full":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500.jpg","width":500,"height":648},"thumbnail":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-150x150.jpg","width":150,"height":150},"medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-231x300.jpg","width":231,"height":300},"large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500.jpg","width":500,"height":648},"vw_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-360x200.jpg","width":360,"height":200},"vw_square_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-360x360.jpg","width":360,"height":360},"vw_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-500x420.jpg","width":500,"height":420},"vw_square_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500.jpg","width":500,"height":648},"vw_large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-500x641.jpg","width":500,"height":641}}}],"comment_count":0,"comment_status":"open","thumbnail":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-150x150.jpg","custom_fields":{"vw_review_average_score":["0"],"vw_post_featured":["0"],"vw_post_layout":["right"],"vw_enable_review":["0"]},"thumbnail_size":"thumbnail","thumbnail_images":{"full":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500.jpg","width":500,"height":648},"thumbnail":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-150x150.jpg","width":150,"height":150},"medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-231x300.jpg","width":231,"height":300},"large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500.jpg","width":500,"height":648},"vw_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-360x200.jpg","width":360,"height":200},"vw_square_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-360x360.jpg","width":360,"height":360},"vw_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-500x420.jpg","width":500,"height":420},"vw_square_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500.jpg","width":500,"height":648},"vw_large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/tumblr_ncqmsrndkV1rx2xpto1_500-500x641.jpg","width":500,"height":641}}},{"id":5,"type":"post","slug":"selena-gomez-reported-pregnant","url":"http:\/\/example.com.com\/instanews\/selena-gomez-reported-pregnant\/","status":"publish","title":"Selena Gomez reported pregnant","title_plain":"Selena Gomez reported pregnant","content":"<p>yolo? fake!<\/p>\n","excerpt":"<p>yolo? fake!<\/p>\n","date":"2014-10-08 20:20:17","modified":"2014-10-08 20:26:23","categories":[{"id":2,"slug":"selena-gomez","title":"Selena Gomez","description":"","parent":0,"post_count":3}],"tags":[],"author":{"id":1,"slug":"admin","name":"admin","first_name":"","last_name":"","nickname":"admin","url":"","description":""},"comments":[],"attachments":[{"id":12,"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot.jpg","slug":"selena-gomez-photoshoot","title":"Selena Gomez - Photoshoot","description":"","caption":"","parent":5,"mime_type":"image\/jpeg","images":{"full":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot.jpg","width":720,"height":541},"thumbnail":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-150x150.jpg","width":150,"height":150},"medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-300x225.jpg","width":300,"height":225},"large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot.jpg","width":720,"height":541},"vw_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-360x200.jpg","width":360,"height":200},"vw_square_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-360x360.jpg","width":360,"height":360},"vw_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-720x420.jpg","width":720,"height":420},"vw_square_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot.jpg","width":720,"height":541},"vw_large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot.jpg","width":720,"height":541}}}],"comment_count":0,"comment_status":"open","thumbnail":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-150x150.jpg","custom_fields":{"vw_review_average_score":["0"],"vw_post_featured":["0"],"vw_post_layout":["right"],"vw_enable_review":["0"]},"thumbnail_size":"thumbnail","thumbnail_images":{"full":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot.jpg","width":720,"height":541},"thumbnail":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-150x150.jpg","width":150,"height":150},"medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-300x225.jpg","width":300,"height":225},"large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot.jpg","width":720,"height":541},"vw_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-360x200.jpg","width":360,"height":200},"vw_square_small":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-360x360.jpg","width":360,"height":360},"vw_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot-720x420.jpg","width":720,"height":420},"vw_square_medium":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot.jpg","width":720,"height":541},"vw_large":{"url":"http:\/\/example.com.com\/instanews\/wp-content\/uploads\/Selena-Gomez-Photoshoot.jpg","width":720,"height":541}}}],"query":{"ignore_sticky_posts":true}} 

我想從第一篇文章的全貌。我的解決方案(它的作品):

let urlPath = "http://example.com/instanews/api/get_posts/" 
    let url: NSURL = NSURL(string: urlPath) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in 
     println("Task completed") 
     if((error) != nil) { 
      // If there is an error in the web request, print it to the console 
      println(error.localizedDescription) 
     } 
     var err: NSError? 
     var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary 
     if(err != nil) { 
      // If there is an error parsing JSON, print it to the console 
      println("JSON Error \(err!.localizedDescription)") 
     } else { 
      var result: AnyObject = jsonResult["posts"]! as NSArray 
      var result2: AnyObject = result[0]! 
      var result3: AnyObject = result2["attachments"]!! 
      var result4: AnyObject = result3[0]! 
      var result5: AnyObject = result4["images"]!! 
      var result6: AnyObject = result5["full"]!! 
      var result7: AnyObject = result6["url"]!! 
      println(result7) 

     } 

    }) 
    task.resume() 

我不滿意這些var result7等,這顯然不是正確的方式來做到這一點。我不太清楚爲什麼我們不能僅僅使用result [「posts」] [0]並且像這樣堆疊它。

也可以請你解釋爲什麼有時必須有雙重感嘆號?我知道這是力量解開,但它爲什麼加倍?

謝謝!

回答

0

你可以考慮使用一些原生的swift json庫,它可以利用Optional語義, https://github.com/owensd/json-swift

那麼你的代碼可以改寫爲

if let result7 = jsonResult["posts"]["attachments"]["images"]["full"]["url"].string { 
    println(result7) 
} 
+0

試過,但出現錯誤:AnyObject?沒有成員「下標」 – selez 2014-10-12 01:53:41

+0

你現在在使用什麼json庫? – 2014-10-12 01:57:42