web-dev-qa-db-fra.com

Convertir une chaîne simple en chaîne JSON en swift

Je sais qu'il y a une question avec le même titre ici . Mais dans cette question, il essaie de convertir un dictionnaire en JSON. Mais j'ai une piqûre simple comme celle-ci: "jardin"

Et je dois l'envoyer en JSON. J'ai essayé SwiftyJSON mais je ne parviens toujours pas à le convertir en JSON.

Voici mon code:

func jsonStringFromString(str:NSString)->NSString{

    let strData = str.dataUsingEncoding(NSUTF8StringEncoding)
    let json = JSON(data: strData!)
    let jsonString = json.string

    return jsonString!
}

Mon code plante à la dernière ligne:

fatal error: unexpectedly found nil while unwrapping an Optional value

Est-ce que je fais quelque chose de mal?

10
iBug

JSON doit être un tableau ou un dictionnaire , il ne peut pas s'agir uniquement d'une chaîne.

Je vous suggère de créer un tableau contenant votre chaîne:

let array = ["garden"]

Ensuite, vous créez un objet JSON à partir de ce tableau:

if let json = try? NSJSONSerialization.dataWithJSONObject(array, options: []) {
    // here `json` is your JSON data
}

Si vous avez besoin de ce JSON en tant que chaîne au lieu de données, vous pouvez utiliser ceci:

if let json = try? NSJSONSerialization.dataWithJSONObject(array, options: []) {
    // here `json` is your JSON data, an array containing the String
    // if you need a JSON string instead of data, then do this:
    if let content = String(data: json, encoding: NSUTF8StringEncoding) {
        // here `content` is the JSON data decoded as a String
        print(content)
    }
}

Tirages:

["jardin"]

Si vous préférez avoir un dictionnaire plutôt qu'un tableau, suivez la même idée: créez le dictionnaire puis convertissez-le.

let dict = ["location": "garden"]

if let json = try? NSJSONSerialization.dataWithJSONObject(dict, options: []) {
    if let content = String(data: json, encoding: NSUTF8StringEncoding) {
        // here `content` is the JSON dictionary containing the String
        print(content)
    }
}

Tirages:

{"emplacement": "jardin"}

22
ayaio

Version Swift 3:

    let location = ["location"]
    if let json = try? JSONSerialization.data(withJSONObject: location, options: []) {
        if let content = String(data: json, encoding: .utf8) {
            print(content)
        }
    }
3
mding5692