web-dev-qa-db-ja.com

swiftで単純な文字列をJSON文字列に変換します

同じタイトルの質問があることを知っています here 。しかし、その質問では、彼は辞書をJSONに変換しようとしています。しかし、私はこのような単純な刺し傷を持っています:「庭」

そして、JSONとして送信する必要があります。 SwiftyJSONを試しましたが、それでもJSONに変換できません。

ここに私のコードがあります:

func jsonStringFromString(str:NSString)->NSString{

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

    return jsonString!
}

私のコードは最後の行でクラッシュします:

fatal error: unexpectedly found nil while unwrapping an Optional value

私は何か間違っていますか?

10
iBug

JSONは配列またはディクショナリでなければなりません 、文字列のみにすることはできません。

Stringを含む配列を作成することをお勧めします。

let array = ["garden"]

次に、この配列からJSONオブジェクトを作成します。

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

このJSONをデータではなく文字列として必要とする場合、これを使用できます:

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)
    }
}

プリント:

["庭園"]

配列よりも辞書が必要な場合は、同じ考えに従ってください:辞書を作成してから変換します。

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)
    }
}

プリント:

{「場所」:「庭」}

22
ayaio

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