2016-06-15 112 views
0

我想解析数组中的数据,但是我不能。如果您有任何建议,请告诉我。这里是我的数据样本:使用Swift从NSData解析JSON

[{"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 
    } 
} 
+0

您的ListSequence是String并且您的响应是数组 –

+0

JSON是顶级数组,而不是字典。 – Larme

+0

https://github.com/SwiftyJSON/SwiftyJSON试试这个 –

回答

3

您的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])。如果你想转换,你必须一次完成一步。

+0

现在它工作。我非常感谢你的帮助。祝你今天愉快。 – yagiz

1

更改代码这样。从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 
    } 
} 

希望这会帮助你。

1

使用您的数据NSArray的

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

这或许对你来说最简单的:

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

这样,你可能只是这样做:

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

或任何你键入你想投到