2016-06-15 148 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]] 

或任何你鍵入你想投到