En mi aplicación iOS 5, tengo una NSStringque contiene una cadena JSON. Me gustaría deserializar esa representación de cadena JSON en un NSDictionaryobjeto 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
NSStringparámetro donde debería pasar unNSDataparámetro:fuente
nilcomo error en lugar de&een XCode 5Por ejemplo, tiene un
NSStringcon caracteres especiales enNSStringstrChangetoJSON. 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
erroren 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.nilinmediato.Con Swift 3 y Swift 4,
Stringtiene 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,
JSONDecodertiene 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 unDictionaryformato JSONString:# 2 Solución Swift 3 y Swift 4
Con Swift 3 y Swift 4,
JSONSerializationtiene 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 unDictionaryformato JSONString:fuente
Usando el código Abizern para swift 2.2
fuente