Ich möchte eine Funktion in meinem schnellen Projekt erstellen, die String in das Dictionary-JSON-Format konvertiert, aber ich habe einen Fehler erhalten:
Der Ausdruckstyp kann nicht konvertiert werden (@lvalue NSData, Optionen: IntegerLitralConvertible ...
Das ist mein Code:
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
}
Ich mache diese Funktion in 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;
}
let jsonDictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String: String];
Antworten:
Warnung: Dies ist eine praktische Methode zum Konvertieren einer JSON-Zeichenfolge in ein Wörterbuch, wenn Sie aus irgendeinem Grund von einer JSON-Zeichenfolge aus arbeiten müssen. Wenn Sie jedoch über die JSON- Daten verfügen , sollten Sie stattdessen mit den Daten arbeiten , ohne überhaupt eine Zeichenfolge zu verwenden.
Swift 3
Swift 2
Original Swift 1 Antwort:
In Ihrer Version haben Sie nicht die richtigen Parameter übergeben
NSJSONSerialization
und vergessen, das Ergebnis zu übertragen. Es ist auch besser, nach möglichen Fehlern zu suchen. Letzte Anmerkung: Dies funktioniert nur, wenn Ihr Wert ein String ist. Wenn es sich um einen anderen Typ handeln könnte, ist es besser, die Wörterbuchkonvertierung wie folgt zu deklarieren:und natürlich müssten Sie auch den Rückgabetyp der Funktion ändern:
quelle
Ich habe Eric Ds Antwort für Swift 2 aktualisiert :
quelle
Swift 3 :
quelle
Mit Swift 3
JSONSerialization
hat eine Methode aufgerufenjsonObject(with:options:)
.jsonObject(with:options:)
hat die folgende Erklärung:Wenn Sie
jsonObject(with:options:)
, müssen Sie mit der Fehlerbehandlung beschäftigen (try
,try?
odertry!
) und Typ Gießen (ausAny
). Daher können Sie Ihr Problem mit einem der folgenden Muster lösen.# 1. Verwenden einer Methode, die einen nicht optionalen Typ auslöst und zurückgibt
Verwendung:
# 2. Verwenden einer Methode, die einen optionalen Typ auslöst und zurückgibt
Verwendung:
#3. Verwenden einer Methode, die keinen nicht optionalen Typ auslöst und zurückgibt
Verwendung:
# 4. Verwenden einer Methode, die keinen optionalen Typ auslöst und zurückgibt
Verwendung:
quelle
Swift 4
quelle
Swift 5
quelle
Ich habe Code gefunden, der den JSON-String in NSDictionary oder NSArray konvertiert. Fügen Sie einfach die Erweiterung hinzu.
SWIFT 3.0
WIE BENUTZT MAN
ERWEITERUNG
}}
quelle
NSMutable...
in Swift überhaupt keine Sammlungstypen. Wenn Sie cast toNSMutable...
eingeben , wird niemals ein veränderbares Objekt erstellt. Und ein nicht spezifizierter Typ in Swift 3+ istAny
nichtAnyObject
.Einzelheiten
Lösung
Verwendung
Testprobe
Testprotokoll
quelle
Für Swift 5 schreibe ich eine Demo, um sie zu überprüfen.
quelle
quelle