Parsing JSON from NSData with Swift



我想在数组中解析数据,但我不能。如果您有任何建议,请告诉我。这是我的数据示例:

[{"ListSequence":1,"StarTime":"15.06.2016 09:00","WorkTime":15,"EndTime":"15.06.2016 09:15","Appointment":"","CustomerId":"12345","Name":"","Address":"bla bla"}, {"ListSequence":2,"StarTime":"15.06.2016 09:20","WorkTime":15,"EndTime":"15.06.2016 09:35","Appointment":"","CustomerId":"54321","Name":"","Address":"bla bla"}]

这是我的功能:

func parserJSON(data: NSData){
    var names = [String]()
    do {
        if let ipString = NSString(data:data, encoding: NSUTF8StringEncoding) {
            let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
            if let sequences = jsonDictionary["ListSequence"] as? [[String: AnyObject]] {
                for sequence in sequences {
                    if let name = jsonDictionary["Name"] as? String{
                        names.append(name)
                    }
                }
            }
        }
    } catch {
        ///alert
    }
}

您的JSON代表数组,而不是对象。尝试以下操作:

func parserJSON(data: NSData){
    var names = [String]()
    do {
        if let ipString = NSString(data:data, encoding: NSUTF8StringEncoding) {
            let json = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as! [AnyObject]
            names = json.map { ($0 as! [String: AnyObject])["Name"] as! String }
        }
    } catch {
        ///alert
        print(error)
    }
}

NSJSONSerialization确实是详细的。一切都是原子值(即String),数组([AnyObject])或字典([String: AnyObject])。如果要转换,则必须一次执行一步。

这样更改您的代码。从API您获得Array而不是Dictionary。这样的变化也是如此

func parserJSON(data: NSData){
    var names = [String]()
    do {
        if let ipString = NSString(data:data, encoding: NSUTF8StringEncoding) {
             let jsonArray = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSArray
             //Now try to iterate Array
        }
    } catch {
        ///alert
    }
}

希望这对您有帮助。

使用您的数据作为 nsarray

let jsonData:NSArray = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as NSArray

这对您来说可能最简单:

extension NSData {
    func fromJSON(options:NSJSONReadingOptions = .AllowFragments) -> AnyObject? {
        return (try? (NSJSONSerialization.JSONObjectWithData(self, options: options)))
    }
}

这样您就可以做:

data.fromJSON() as? [[String:AnyObject]]

或您要施放到

的任何输入

最新更新