2016-04-27 3 views
0

Я пытаюсь читать электронную почту из файла JSON в быстрой (2.2), которая является:как читать данные из JSON в swift2

{ "employees" : [ 
    { 
    "name": "sudhanshu", 
    "email": "[email protected]", 
    "password": "password" 
    "profilePic": "" 
}, 
{ 
    "name": "prokriti", 
    "email": "[email protected]", 
    "password": "[email protected]", 
    "profilePic": "" 
    } 
]} 

Но я получаю ошибку «Error Domain = NSCocoaErrorDomain Код = 3840» Unescaped управляющий символ вокруг символа 128. «UserInfo = {NSDebugDescription = Unescaped управляющий символ вокруг символа 128.}« Я видел более ранние сообщения, но не смог найти, где именно проблема?

if let path = NSBundle.mainBundle().pathForResource("Employees", ofType: "json") { 
     if let data = NSData(contentsOfFile: path) { 
      do { 
       let jsonResult: NSDictionary = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 

       if let error = jsonResult["error"] { 
        print("Error is: \(error)") 
       } else { 
        if let person = jsonResult["email"] { 
         print(person) // dictionary[@"quotables"] 
        } 
       } 

      } catch let error as NSError { 
      print("Error is: \(error)") 
      } 

     } 
    } 

Заранее благодарен!

ответ

0

Вы пытаетесь получить доступ непосредственно ключ из словаря по электронной почте. в то время как вам нужно сначала получить доступ к массиву из ключа «сотрудники» &, тогда вам нужно получить значение с помощью «электронной почты».

if let path = NSBundle.mainBundle().pathForResource("Employees", ofType: "json") { 
if let data = NSData(contentsOfFile: path) { 
    do { 
     let jsonResult: NSDictionary = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 

     if let error = jsonResult["error"] { 
      print("Error is: \(error)") 
     } else { 
      let person = jsonResult["employees"] as! NSArray 
      for i in 0..<person.count 
      { 
       let dict = person.objectAtIndex(i) as! NSDictionary 
       let strEmail = dict["email"] as! String 
       print(strEmail) 
      } 
     } 

    } catch let error as NSError { 
     print("Error is: \(error)") 
    } 

} 
+0

Пожалуйста, подумайте об объяснении, а не просто оставьте код. Спасибо :) – Fennec

+0

Пожалуйста, обратитесь к объяснению кода –

5

"пароль": «пароль»

должен быть

"пароль": "пароль"

У вас есть недопустимое характер вместо " .

Обновление

Теперь, когда вы исправили свой недопустимый символ, вы можете получить доступ к своим данным. Но вы пытаетесь использовать в качестве NSDictionary то, что на самом деле является массивом, если я верю выписку JSON, которую вы нам показали.

Так что вы должны сделать что-то вроде этого, а не в вашем do:

if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [[String: String]] { 
    for jsonDictionary in jsonResult { 
     if let person = jsonDictionary["email"] { 
      print(person) 
     } 
    } 
} 

Update и исправить

if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String: AnyObject] { 
    if let employees = jsonResult["Employees"] as? [[String:String]] { 
     for employee in employees { 
      if let person = employee["email"] { 
       print(person) 
      } 
     } 
    } 
} 
+0

Спасибо @Eric D, но я не могу получить доступ к электронной почте здесь. –

+0

Я получаю «nil» в if statement jsonResult ["email"] –

+1

@ S.Bharti Проанализируйте структуру JSON. '{}' представляет словарь, '[]' массив. Корневой объект - это словарь «служащие», включая массив словарей с данными сотрудника. И используйте собственные типы коллекции Swift, а не типы, не указанные в спецификации. – vadian

Смежные вопросы