Je veux créer une fonction dans mon projet swift qui convertit String au format Dictionary json mais j'ai une erreur:
Impossible de convertir le type de l'expression (@lvalue NSData, options: IntegerLitralConvertible ...
Voici mon 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
}
Je fais cette fonction en 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
pantalon
la source
la source
let jsonDictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String: String];
Réponses:
Attention: il s'agit d'une méthode pratique pour convertir une chaîne JSON en dictionnaire si, pour une raison quelconque, vous devez travailler à partir d'une chaîne JSON. Mais si vous disposez des données JSON , vous devriez plutôt travailler avec les données , sans utiliser de chaîne du tout.
Swift 3
Swift 2
Réponse originale de Swift 1:
Dans votre version, vous n'avez pas transmis les paramètres appropriés à
NSJSONSerialization
et avez oublié de convertir le résultat. En outre, il est préférable de vérifier l'erreur possible. Dernière remarque: cela ne fonctionne que si votre valeur est une chaîne. S'il peut s'agir d'un autre type, il serait préférable de déclarer la conversion du dictionnaire comme ceci:et bien sûr, vous devrez également changer le type de retour de la fonction:
la source
J'ai mis à jour la réponse d'Eric D pour Swift 5 :
la source
Swift 3 :
la source
Avec Swift 3,
JSONSerialization
a une méthode appeléejsonObject(with:options:)
.jsonObject(with:options:)
a la déclaration suivante:Lorsque vous utilisez
jsonObject(with:options:)
, vous devez gérer la gestion des erreurs (try
,try?
outry!
) et la conversion de type (à partir deAny
). Par conséquent, vous pouvez résoudre votre problème avec l'un des modèles suivants.#1. Utilisation d'une méthode qui lève et renvoie un type non facultatif
Usage:
# 2. Utilisation d'une méthode qui lève et renvoie un type facultatif
Usage:
# 3. Utilisation d'une méthode qui ne lance pas et retourne un type non facultatif
Usage:
# 4. Utilisation d'une méthode qui ne lance pas et retourne un type facultatif
Usage:
la source
Swift 4
la source
Swift 5
la source
J'ai trouvé du code qui convertit la chaîne json en NSDictionary ou NSArray. Ajoutez simplement l'extension.
SWIFT 3.0
COMMENT UTILISER
EXTENSION
}
la source
NSMutable...
types de collection dans Swift. Le type cast enNSMutable...
ne donnera jamais un objet mutable. Et un type non spécifié dans Swift 3+ ne l'estAny
pasAnyObject
.Détails
Solution
Usage
Échantillon de test
Journal de test
la source
pour swift 5, j'écris une démo pour le vérifier.
la source
la source