NSJSONSerialization错误.Code = 3840"字符0周围的值无效

aot*_*n16 8 swift

NSJSONSerialization.JSONObjectWithData 使用像"abc"这样的字符串时出错,但使用"123"成功

我不知道为什么.


错误日志

2015-11-04 17:42:02.997 SwiftJsonDemo[27196:2701028] Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}
Run Code Online (Sandbox Code Playgroud)

//var str = "123" // ok
var str = "abc" // error
let strData = str.dataUsingEncoding(NSUTF8StringEncoding)

if let d = strData {
    let urlStr = String(data: d, encoding: NSUTF8StringEncoding)

    do {
        let json = try NSJSONSerialization.JSONObjectWithData(d, options: NSJSONReadingOptions.AllowFragments)
    } catch let e {
        print(e)
    }
} else {
    print("data error")
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 5

123
Run Code Online (Sandbox Code Playgroud)

是一个有效的JSON编号,因此如果.AllowFragments 设置了该选项,则可以将其读作JSON .JSON字符串必须用引号括起来:( 有关详细信息,请参阅http://www.json.org):

"abc"
Run Code Online (Sandbox Code Playgroud)

在Swift字符串文字中,这些引号使用反斜杠进行转义:

let str = "\"abc\"" // OK!
let strData = str.dataUsingEncoding(NSUTF8StringEncoding)
// ...
Run Code Online (Sandbox Code Playgroud)