No meu aplicativo iOS 5, eu tenho um NSString
que contém uma string JSON. Eu gostaria de desserializar essa representação de string JSON em um NSDictionary
objeto nativo .
"{\"password\" : \"1234\", \"user\" : \"andreas\"}"
Eu tentei a seguinte abordagem:
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:@"{\"2\":\"3\"}"
options:NSJSONReadingMutableContainers
error:&e];
Mas isso gera um erro de tempo de execução. O que estou fazendo de errado?
-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c'
Respostas:
Parece que você está passando um
NSString
parâmetro no qual deveria estar passando umNSData
parâmetro:fonte
nil
como erro em vez de&e
no XCode 5Por exemplo, você possui um
NSString
caractere especial emNSString
strChangetoJSON. Em seguida, você pode converter essa sequência em resposta JSON usando o código acima.fonte
Eu fiz uma categoria da resposta @Abizern
Use-o assim,
fonte
error
nesses casos, mas testar se o valor de retorno é nulo ou não antes de retornar. ou sejareturn json ?: nil;
, nitpick menor, mas vale a pena mencionar, eu acho.nil
imediatamente.Com o Swift 3 e o Swift 4, o
String
método é chamadodata(using:allowLossyConversion:)
.data(using:allowLossyConversion:)
tem a seguinte declaração:Com o Swift 4,
String
's'data(using:allowLossyConversion:)
podem ser usados em conjunto comJSONDecoder
'sdecode(_:from:)
para desserializar uma string JSON em um dicionário.Além disso, com Swift 3 e Swift 4,
String
os sdata(using:allowLossyConversion:)
também podem ser usados em conjunto comJSONSerialization
osjsonObject(with:options:)
para desserializar uma string JSON em um dicionário.# 1 Solução Swift 4
Com o Swift 4,
JSONDecoder
tem um método chamadodecode(_:from:)
.decode(_:from:)
tem a seguinte declaração:O código do Playground abaixo mostra como usar
data(using:allowLossyConversion:)
edecode(_:from:)
para obter aDictionary
partir de um formato JSONString
:# 2 Solução Swift 3 e Swift 4
Com o Swift 3 e o Swift 4, o
JSONSerialization
método é chamadojsonObject(with:options:)
.jsonObject(with:options:)
tem a seguinte declaração:O código do Playground abaixo mostra como usar
data(using:allowLossyConversion:)
ejsonObject(with:options:)
para obter aDictionary
partir de um formato JSONString
:fonte
Usando o código Abizern para o swift 2.2
fonte