En mi aplicación iOS 5, tengo una NSString
que contiene una cadena JSON. Me gustaría deserializar esa representación de cadena JSON en un NSDictionary
objeto nativo .
"{\"password\" : \"1234\", \"user\" : \"andreas\"}"
Intenté el siguiente enfoque:
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:@"{\"2\":\"3\"}"
options:NSJSONReadingMutableContainers
error:&e];
Pero arroja un error de tiempo de ejecución. ¿Qué estoy haciendo mal?
-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c'
Respuestas:
Parece que está pasando un
NSString
parámetro donde debería pasar unNSData
parámetro:fuente
nil
como error en lugar de&e
en XCode 5Por ejemplo, tiene un
NSString
con caracteres especiales enNSString
strChangetoJSON. Luego puede convertir esa cadena a respuesta JSON utilizando el código anterior.fuente
He hecho una categoría de @Abizern respuesta
Úselo así,
fuente
error
en estos casos, sino probar si el valor de retorno es nulo o no antes de regresar. es decirreturn json ?: nil;
, un pequeño problema, pero vale la pena mencionarlo, creo.nil
inmediato.Con Swift 3 y Swift 4,
String
tiene un método llamadodata(using:allowLossyConversion:)
.data(using:allowLossyConversion:)
tiene la siguiente declaración:Con Swift 4,
String
'sdata(using:allowLossyConversion:)
se puede usar junto conJSONDecoder
' sdecode(_:from:)
para deserializar una cadena JSON en un diccionario.Además, con Swift 3 y Swift 4, los
String
's'data(using:allowLossyConversion:)
también se pueden usar junto conJSONSerialization
's'jsonObject(with:options:)
para deserializar una cadena JSON en un diccionario.# 1 Solución Swift 4
Con Swift 4,
JSONDecoder
tiene un método llamadodecode(_:from:)
.decode(_:from:)
tiene la siguiente declaración:El siguiente código de Playground muestra cómo usar
data(using:allowLossyConversion:)
ydecode(_:from:)
para obtener unDictionary
formato JSONString
:# 2 Solución Swift 3 y Swift 4
Con Swift 3 y Swift 4,
JSONSerialization
tiene un método llamadojsonObject(with:options:)
.jsonObject(with:options:)
tiene la siguiente declaración:El siguiente código de Playground muestra cómo usar
data(using:allowLossyConversion:)
yjsonObject(with:options:)
para obtener unDictionary
formato JSONString
:fuente
Usando el código Abizern para swift 2.2
fuente