NSJSONSerialization错误。代码= 3840"字符0周围的值无效

时间:2015-11-04 10:01:35

标签: swift

使用" abc"等字符串时出现

NSJSONSerialization.JSONObjectWithData错误但成功使用" 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.}

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

4 个答案:

答案 0 :(得分:5)

123

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

"abc"

在Swift字符串文字中,这些引号会被转义 反斜线:

let str = "\"abc\"" // OK!
let strData = str.dataUsingEncoding(NSUTF8StringEncoding)
// ...

答案 1 :(得分:2)

如果使用swift,请检查以下代码行:

let contentType = response.response?.allHeaderFields["Content-Type"] as? String

内容类型不会出现:“application / json”。它表示来自服务器的响应不是有效的JSON字符串。

答案 2 :(得分:0)

请查看邮递员的回应。我刚刚通过检查json响应是否是正确格式或html格式

来解决

答案 3 :(得分:0)

我得到了同样的错误。原来错误在于请求中。以下语法修复了向请求添加参数时的问题。

request.setValue("Value", forHTTPHeaderField: "Key")