Dans mon application iOS 5, j'ai un NSString
qui contient une chaîne JSON. Je voudrais désérialiser cette représentation de chaîne JSON en un NSDictionary
objet natif .
"{\"password\" : \"1234\", \"user\" : \"andreas\"}"
J'ai essayé l'approche suivante:
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:@"{\"2\":\"3\"}"
options:NSJSONReadingMutableContainers
error:&e];
Mais cela génère une erreur d'exécution. Qu'est-ce que je fais 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'
Réponses:
Il semble que vous passiez un
NSString
paramètre où vous devriez passer unNSData
paramètre:la source
nil
comme erreur au lieu de&e
XCode 5Par exemple, vous avez un
NSString
avec des caractères spéciaux dansNSString
strChangetoJSON. Ensuite, vous pouvez convertir cette chaîne en réponse JSON en utilisant le code ci-dessus.la source
J'ai créé une catégorie à partir de la réponse @Abizern
Utilisez-le comme ça,
la source
error
dans ces cas, mais plutôt de tester si la valeur de retour est nulle ou non avant de retourner. c'est-à-direreturn json ?: nil;
mineure pinaille, mais mérite d'être mentionnée, je pense.nil
tout de suite.Avec Swift 3 et Swift 4,
String
a une méthode appeléedata(using:allowLossyConversion:)
.data(using:allowLossyConversion:)
a la déclaration suivante:Avec Swift 4,
String
'sdata(using:allowLossyConversion:)
peut être utilisé avecJSONDecoder
' sdecode(_:from:)
afin de désérialiser une chaîne JSON dans un dictionnaire.De plus, avec Swift 3 et Swift 4,
String
'sdata(using:allowLossyConversion:)
peut également être utilisé en conjonction avecJSONSerialization
' sjsonObject(with:options:)
afin de désérialiser une chaîne JSON dans un dictionnaire.#1. Solution Swift 4
Avec Swift 4,
JSONDecoder
a une méthode appeléedecode(_:from:)
.decode(_:from:)
a la déclaration suivante:Le code Playground ci-dessous montre comment utiliser
data(using:allowLossyConversion:)
etdecode(_:from:)
pour obtenir un àDictionary
partir d'un format JSONString
:# 2. Solution Swift 3 et Swift 4
Avec Swift 3 et Swift 4,
JSONSerialization
a une méthode appeléejsonObject(with:options:)
.jsonObject(with:options:)
a la déclaration suivante:Le code Playground ci-dessous montre comment utiliser
data(using:allowLossyConversion:)
etjsonObject(with:options:)
pour obtenir un àDictionary
partir d'un format JSONString
:la source
Utilisation du code Abizern pour Swift 2.2
la source