with recorrer parse jsonserialization descargar data json swift3

recorrer - swift parse json object



Crash: convierte diccionario a cadena Json en Swift 3 (1)

Intento convertir mi rápido diccionario en Json string, pero me estoy poniendo extraño al decir

Aplicación de finalización debido a excepción no detectada ''NSInvalidArgumentException'', razón: ''Tipo no válido en JSON write (_SwiftValue)''

Mi código:

let jsonObject: [String: AnyObject] = [ "firstname": "aaa", "lastname": "sss", "email": "my_email", "nickname": "ddd", "password": "123", "username": "qqq" ] do { let jsonData = try JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted) // here "jsonData" is the dictionary encoded in JSON data let decoded = try JSONSerialization.jsonObject(with: jsonData, options: []) // here "decoded" is of type `Any`, decoded from JSON data // you can now cast it with the right type if let dictFromJSON = decoded as? [String:String] { // use dictFromJSON } } catch { print(error.localizedDescription) }

¡Por favor, ayúdame!

Saludos.


String no es del tipo AnyObject . Los objetos son tipos de referencia , pero String in swift tiene semántica de valores . Sin embargo, una Cadena puede ser de tipo Cualquiera , por lo que el siguiente código funciona. Sugiero que lea sobre los tipos de referencia y los tipos de valores semánticos en Swift; es una distinción sutil pero importante y también diferente de lo que espera de la mayoría de los otros lenguajes, donde String suele ser un tipo de referencia (incluido el objetivo C).

let jsonObject: [String: Any] = [ "firstname": "aaa", "lastname": "sss", "email": "my_email", "nickname": "ddd", "password": "123", "username": "qqq" ] do { let jsonData = try JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted) // here "jsonData" is the dictionary encoded in JSON data let decoded = try JSONSerialization.jsonObject(with: jsonData, options: []) // here "decoded" is of type `Any`, decoded from JSON data // you can now cast it with the right type if let dictFromJSON = decoded as? [String:String] { print(dictFromJSON) } } catch { print(error.localizedDescription) }