在Swift中将简单字符串转换为JSON字符串

10

我知道有一个标题相同的问题在这里,但是那个问题是关于将一个字典转换成JSON。而我只有一个简单的字符串:

"garden"

我需要将它作为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

我做错了什么吗?

2个回答

27

JSON必须是数组或字典,不能只是一个字符串。

我建议您创建一个包含您的字符串的数组:

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

输出:

["garden"]

如果您更喜欢字典而不是数组,请遵循同样的思路:先创建字典,然后将其转换。

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

打印:

{"location":"花园"}


4

Swift 3 版本:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接