Quiero hacer una función en mi proyecto rápido que convierta String a formato json de diccionario, pero recibí un error:
No se puede convertir el tipo de expresión (@lvalue NSData, opciones: IntegerLitralConvertible ...
Este es mi código:
func convertStringToDictionary (text:String) -> Dictionary<String,String> {
var data :NSData = text.dataUsingEncoding(NSUTF8StringEncoding)!
var json :Dictionary = NSJSONSerialization.JSONObjectWithData(data, options:0, error: nil)
return json
}
Hago esta función en Objective-C:
- (NSDictionary*)convertStringToDictionary:(NSString*)string {
NSError* error;
//giving error as it takes dic, array,etc only. not custom object.
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
return json;
}
json
swift
dictionary
nsjsonserialization
trousout
fuente
fuente
let jsonDictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String: String];
Respuestas:
Advertencia: este es un método conveniente para convertir una cadena JSON en un diccionario si, por alguna razón, tiene que trabajar desde una cadena JSON. Pero si tiene los datos JSON disponibles, debería trabajar con los datos , sin usar una cadena.
Swift 3
Swift 2
Respuesta original de Swift 1:
En su versión, no pasó los parámetros adecuados a
NSJSONSerialization
y olvidó lanzar el resultado. Además, es mejor verificar el posible error. Última nota: esto funciona solo si su valor es una Cadena. Si pudiera ser de otro tipo, sería mejor declarar la conversión del diccionario así:y, por supuesto, también necesitaría cambiar el tipo de retorno de la función:
fuente
He actualizado la respuesta de Eric D para Swift 5 :
fuente
Swift 3 :
fuente
Con Swift 3,
JSONSerialization
tiene un método llamadojsonObject(with:options:)
.jsonObject(with:options:)
tiene la siguiente declaración:Cuando lo usa
jsonObject(with:options:)
, tiene que lidiar con el manejo de errores (try
,try?
otry!
) y la conversión de tipos (desdeAny
). Por lo tanto, puede resolver su problema con uno de los siguientes patrones.# 1 Usando un método que arroja y devuelve un tipo no opcional
Uso:
# 2 Usando un método que arroja y devuelve un tipo opcional
Uso:
# 3 Usar un método que no arroje y devuelva un tipo no opcional
Uso:
# 4. Usar un método que no arroje y devuelva un tipo opcional
Uso:
fuente
Swift 4
fuente
Swift 5
fuente
Encontré un código que convierte la cadena json a NSDictionary o NSArray. Solo agrega la extensión.
SWIFT 3.0
CÓMO UTILIZAR
EXTENSIÓN
}
fuente
NSMutable...
tipos de colección en Swift en absoluto. Escribir cast toNSMutable...
nunca dará como resultado un objeto mutable. Y un tipo no especificado en Swift 3+ esAny
, noAnyObject
.Detalles
Solución
Uso
Muestra de prueba
Registro de prueba
fuente
para swift 5, escribo una demostración para verificarlo.
fuente
fuente