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)
}