In meiner iOS 5-App habe ich eine NSString
, die eine JSON-Zeichenfolge enthält. Ich möchte diese JSON-Zeichenfolgendarstellung in ein natives NSDictionary
Objekt deserialisieren .
"{\"password\" : \"1234\", \"user\" : \"andreas\"}"
Ich habe folgenden Ansatz versucht:
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:@"{\"2\":\"3\"}"
options:NSJSONReadingMutableContainers
error:&e];
Aber es wird ein Laufzeitfehler ausgegeben. Was mache ich falsch?
-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c'
Antworten:
Es sieht so aus, als würden Sie einen
NSString
Parameter übergeben, an den Sie einenNSData
Parameter übergeben sollten:quelle
nil
als Fehler anstelle von&e
XCode 5Zum Beispiel haben Sie ein
NSString
mit Sonderzeichen inNSString
strChangetoJSON. Anschließend können Sie diese Zeichenfolge mit dem obigen Code in eine JSON-Antwort konvertieren.quelle
Ich habe eine Kategorie aus @Abizern Antwort gemacht
Verwenden Sie es so,
quelle
error
in diesen Fällen nicht zu testen , sondern vor der Rückkehr zu testen, ob der Rückgabewert Null ist oder nicht. dhreturn json ?: nil;
Minor Nitpick, aber erwähnenswert, denke ich.nil
sofort zurück.Mit Swift 3 und Swift 4
String
wird eine Methode aufgerufendata(using:allowLossyConversion:)
.data(using:allowLossyConversion:)
hat die folgende Erklärung:Mit Swift 4 kann
String
'sdata(using:allowLossyConversion:)
in Verbindung mitJSONDecoder
' s verwendetdecode(_:from:)
werden, um eine JSON-Zeichenfolge in ein Wörterbuch zu deserialisieren.Darüber hinaus können mit Swift 3 und Swift 4
String
'sdata(using:allowLossyConversion:)
auch in Verbindung mitJSONSerialization
' s verwendetjsonObject(with:options:)
werden, um eine JSON-Zeichenfolge in ein Wörterbuch zu deserialisieren.# 1. Swift 4-Lösung
Mit Swift 4
JSONDecoder
wird eine Methode aufgerufendecode(_:from:)
.decode(_:from:)
hat die folgende Erklärung:Der folgende Spielplatzcode zeigt, wie
data(using:allowLossyConversion:)
unddecode(_:from:)
um einenDictionary
von einem JSON formatierten zu erhaltenString
:# 2. Swift 3 und Swift 4 Lösung
Mit Swift 3 und Swift 4
JSONSerialization
wird eine Methode aufgerufenjsonObject(with:options:)
.jsonObject(with:options:)
hat die folgende Erklärung:Der folgende Spielplatzcode zeigt, wie
data(using:allowLossyConversion:)
undjsonObject(with:options:)
um einenDictionary
von einem JSON formatierten zu erhaltenString
:quelle
Verwenden von Abizern- Code für Swift 2.2
quelle