2015-06-03 53 views
3

所以我有格式化爲字典列表的JSON數據,並將其存儲爲NSArray對象,但我不確定如何將每個條目轉換爲字典對象當它是目前AnyObject解析Json數組中的對象作爲字典Swift

的AnyObject數據已經格式化像一個JSON字典

這裏是我用來創建陣列

func startConnection(){ 
    let urlPath: String = "http://api.mtgdb.info/search/omni" 
    var url: NSURL = NSURL(string: urlPath)! 
    var request: NSURLRequest = NSURLRequest(URL: url) 
    var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)! 
    connection.start() 




} 

func connection(connection: NSURLConnection!, didReceiveData data: NSData!){ 
    self.data.appendData(data) 
} 

func connectionDidFinishLoading(connection: NSURLConnection!){ 
    var err: NSError 
    var jsonResult: NSArray = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSArray 
    for var i = 0; i<jsonResult.count; ++i{ 
     ... 

    } 

} 
+0

這個樣本所以你說你有這些字典存儲在一個NSArray。他們是陣列中的NSStrings嗎?或者他們是一些其他類型的對象,比如NSDictionary? –

+0

我使用用於創建NSArray的代碼編輯我的帖子 – Chris

+0

該URL返回的JSON是一個字典數組,因此您只需使用'as! NSDictionary'當你訪問外層數組元素 – Paulw11

回答

5

我試過此示例代碼來解決你的問題的代碼。 首先在網絡瀏覽器中運行這個「http://api.mtgdb.info/search/omni」URL並複製響應,然後粘貼到「http://jsonlint.com」,響應有效,我得到8個字典的數組,如id:37113,39932,83737,106426,228247,2888937,382286 ,386302 - 8數據。在目標C中,它工作得很完美,並且我得到與Web瀏覽器相同的結果。 但是在Swift中,它表現得很奇怪,無法解析整個respose,只得到一半字典作爲數組的對象。只有得到響應的這麼多的部分,

Printing description of jsonResult: ( { artist = "Arnie Swekel"; cardSetId = JUD; cardSetName = Judgment; colors = ( green, white ); convertedManaCost = 7; description = "Trample\nPhantom Nishoba enters the battlefield with seven +1/+1 counters on it.\nWhenever Phantom Nishoba deals damage, you gain that much life.\nIf damage would be dealt to Phantom Nishoba, prevent that damage. Remove a +1/+1 counter from Phantom Nishoba."; flavor = ""; formats = ( { legality = Legal; name = "Odyssey Block"; }, { legality = Legal; name = Legacy; }, { legality = Legal; name = Vintage; }, { legality = Legal; name = Freeform; }, { legal

我試過的代碼

class ViewController: UIViewController, NSURLConnectionDelegate { 

var data:NSMutableData! 
var arrvehicls:NSMutableArray! 


override func viewDidLoad() { 
    super.viewDidLoad() 
    self.data = NSMutableData() 
    self.arrvehicls = NSMutableArray() 

    self.startConnection() 
} 

func startConnection(){ 
    let urlPath: String = "http://api.mtgdb.info/search/omni" 
    var url: NSURL = NSURL(string: urlPath)! 
    var request: NSURLRequest = NSURLRequest(URL: url) 
    var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)! 
    connection.start() 
} 

func connection(connection: NSURLConnection!, didReceiveData data: NSData!){ 
    self.data.appendData(data) 
} 

func connectionDidFinishLoading(connection: NSURLConnection!) { 

    var err: NSError 
    var jsonResult:NSArray = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSArray 

    for var i = 0; i<jsonResult.count; ++i { 

     var dictResult = jsonResult.objectAtIndex(i) as! NSDictionary 

     var vehicleInfo = Vehicle() 
     vehicleInfo.id = dictResult.valueForKey("id") as! Int 
     vehicleInfo.artist = dictResult.valueForKey("artist") as! String 
     vehicleInfo.cardID = dictResult.valueForKey("cardSetId") as! String 
     vehicleInfo.cardName = dictResult.valueForKey("cardSetName") as! String 
     vehicleInfo.colors = dictResult.valueForKey("colors") as! NSArray 
     vehicleInfo.details = dictResult.valueForKey("description") as! String 
     vehicleInfo.flavour = dictResult.valueForKey("flavor") as! String 
     vehicleInfo.formats = NSMutableArray() 
     var arr = dictResult.valueForKey("formats") as! NSArray 

     for var j = 0; j<arr.count; ++i { 

      var dictFormats = arr.objectAtIndex(i) as! NSDictionary 
      var formats = Formats() 
      formats.legality = dictFormats.valueForKey("legality") as! String 
      formats.name = dictFormats.valueForKey("name") as! String 
      vehicleInfo.formats.addObject(formats) 
     } 
     self.arrvehicls.addObject(vehicleInfo) 
    } 
} 
} 
+0

我不知道,即使我困惑這是怎麼發生的。 :( – VRAwesome