将Json数组中的对象解析为字典Swift

时间:2015-06-03 22:25:53

标签: ios json swift nsarray

所以我将JSON数据格式化为字典列表,并将其存储为NSArray对象,但我不确定如何将每个条目转换为当前AnyObject的字典对象

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{
       ...

    }

}

1 个答案:

答案 0 :(得分:5)

我尝试了这个示例代码来解决您的问题。 首先运行这个&#34; http://api.mtgdb.info/search/omni&#34; Web浏览器中的URL和复制响应然后粘贴到&#34; http://jsonlint.com&#34;,响应有效,我得到8个字典的数组,如id:37113,39932,83737,106426,228247,288937, 382286,386302 - 8 data。

在Objective 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)
    }
}
}