Я пытаюсь прочитать электронную почту из файла json в swift (2.2), который:
{ "employees" : [
{
"name": "sudhanshu",
"email": "sudhanshu.bharti@digitalavenues.com",
"password": "password"
"profilePic": ""
},
{
"name": "prokriti",
"email": "prokriti.roy@digitalavenues.com",
"password": "password@123",
"profilePic": ""
}
]}
Но я получаю сообщение об ошибке «Error Domain = NSCocoaErrorDomain Code = 3840» Неэкранированный управляющий символ вокруг символа 128. «UserInfo = {NSDebugDescription = Неэкранированный управляющий символ вокруг символа 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)")
}
}
}
Заранее спасибо!
2 ответа
Вы пытаетесь напрямую получить доступ к электронному ключу из словаря. в то время как вам нужно сначала получить доступ к массиву из ключа «сотрудники», а затем вам нужно получить значение из ключа «электронная почта».
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)")
}
}
"пароль": "пароль"
Должно быть
"пароль": "пароль"
У вас недопустимый символ ”
вместо "
.
Обновить
Теперь, когда вы исправили свой недопустимый символ, вы можете получить доступ к своим данным. Но вы пытаетесь преобразовать в 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)
}
}
}
Обновить и исправить
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)
}
}
}
}
Похожие вопросы
Новые вопросы
json
JSON (нотация объектов JavaScript) — это сериализуемый формат обмена данными, который может быть прочитан машиной и человеком. Не используйте этот тег для собственных объектов JavaScript или литералов объектов JavaScript. Прежде чем задать вопрос, подтвердите свой JSON с помощью валидатора JSON, такого как JSONLint (https://jsonlint.com).