ios - jsonserialization - Swift-Cómo pasar por NSDictionary
swift dictionary to json (2)
Hola, actualmente estoy aprendiendo Swift y quería extraer datos de una API JSON, el código de My Swift se ve así. Para ser específicos, necesito extraer cada clave y su valor (por ejemplo: imprimir el valor del título, la cubierta, etc.)
//Json request
var error: NSError?
var raw = NSString.stringWithString("http://example.com/MovieAPI/api/v1/movies/")
var api_url = NSURL.URLWithString(raw)
let jsonData: NSData = NSData.dataWithContentsOfURL(api_url, options: nil, error: &error)
let result = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error)
as NSDictionary
for val in result {
for (var i=0; i < val.value.count; i++){
//println(val.value.valueAtIndex(3)) Not Working
}
}
y la estructura de mi JSON es
{
data: [
{
id: 2,
title: "Hunger Games",
cover: "http://example.com",
genre: 2
}
]
}
¡Ayuda!
Aquí es cómo puedes procesar un JSON dado:
let dataArray = result["data"] as NSArray;
print("Data items count: /(dataArray.count)")
for item in dataArray { // loop through data items
let obj = item as NSDictionary
for (key, value) in obj {
print("Property: /"/(key as String)/"")
}
}
Observaciones:
Recuerde que recibe los objetos analizados como NSDictionary
y cuando recorre el diccionario, el orden en el que recibe las propiedades puede diferir del orden en el JSON original.
Compruebe esta pieza de código para referencia:
// MARK: - Firebase
func retrieveData(){
ref.observe(FIRDataEventType.value, with: { (snapshot) in
let postDict = snapshot.value as! [String : AnyObject]
let contactList = postDict["contacts"]!
let user = FIRAuth.auth()!.currentUser
let contactArray = contactList[user!.uid]! as! NSDictionary
for (key,_) in contactArray {
let contact:NSObject = contactArray[key] as! NSObject
let firstName:String! = contact.value(forKey: "firstName") as? String
let lastName:String! = contact.value(forKey: "lastName") as? String
let company:String! = contact.value(forKey: "company") as? String
let phone:String! = contact.value(forKey: "phone") as? String
let email:String! = contact.value(forKey: "email") as? String
print(contact.value(forKey: "firstName")!)
contacts.append(Contact(firstName:firstName, lastName: lastName, company: company, phone: phone, email: email))
}
self.tableView.reloadData()
})
}
Se complica especialmente cuando se analiza el valor de clave en el objeto utilizable que es donde NSObject viene a rescatar para que pueda obtener los valores de clave.