Eu quero fazer uma função no meu projeto rápido que converte String para o formato json Dictionary, mas recebi um erro:
Não é possível converter o tipo de expressão (@lvalue NSData, options: IntegerLitralConvertible ...
Este é o meu 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
}
Eu faço essa função no 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
calças
fonte
fonte
let jsonDictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String: String];
Respostas:
Aviso: este é um método conveniente de converter uma string JSON em um dicionário se, por algum motivo, você precisar trabalhar com uma string JSON. Mas se você tiver os dados JSON disponíveis, deverá trabalhar com os dados , sem usar uma string.
Swift 3
Swift 2
Resposta original do Swift 1:
Na sua versão, você não passou os parâmetros adequados
NSJSONSerialization
e esqueceu de transmitir o resultado. Além disso, é melhor verificar o possível erro. Última nota: isso funciona apenas se o seu valor for uma String. Se pudesse ser outro tipo, seria melhor declarar a conversão do dicionário assim:e, claro, você também precisaria alterar o tipo de retorno da função:
fonte
Atualizei a resposta de Eric D para o Swift 5 :
fonte
Swift 3 :
fonte
Com o Swift 3,
JSONSerialization
tem um método chamadojsonObject(with:options:)
.jsonObject(with:options:)
tem a seguinte declaração:Ao usar
jsonObject(with:options:)
, você deve lidar com o tratamento de erros (try
,try?
outry!
) e digitar a conversão (deAny
). Portanto, você pode resolver seu problema com um dos seguintes padrões.# 1 Usando um método que lança e retorna um tipo não opcional
Uso:
# 2 Usando um método que lança e retorna um tipo opcional
Uso:
# 3 Usando um método que não lança e retorna um tipo não opcional
Uso:
# 4 Usando um método que não lança e retorna um tipo opcional
Uso:
fonte
Swift 4
fonte
Swift 5
fonte
Encontrei código que converte a string json em NSDictionary ou NSArray. Basta adicionar a extensão.
SWIFT 3.0
COMO USAR
EXTENSÃO
}
fonte
NSMutable...
tipos de coleção no Swift. Digitar conversão paraNSMutable...
nunca resultará em um objeto mutável. E um tipo não especificado no Swift 3+ éAny
, nãoAnyObject
.Detalhes
Solução
Uso
Amostra de teste
Log de teste
fonte
para o swift 5, escrevo uma demonstração para verificá-la.
fonte
fonte