【问题标题】:NSJSONSerialization error. Code=3840 "Invalid value around character 0NSJSON序列化错误。 Code=3840 "字符 0 周围的值无效
【发布时间】:2015-11-04 10:01:35
【问题描述】:

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

代码

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

【问题讨论】:

    标签: swift


    【解决方案1】:
    123
    

    是一个有效的 JSON 编号,因此如果 .AllowFragments 选项已设置。 JSON 字符串 必须 括在引号中: (详见http://www.json.org):

    "abc"
    

    在 Swift 字符串文字中,这些引号用 反斜杠:

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

    【讨论】:

    • 非常感谢。明白了!
    【解决方案2】:

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

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

    内容类型不会是:“application/json”。这意味着来自服务器的响应不是有效的 JSON 字符串。

    【讨论】:

      【解决方案3】:

      请检查 Postman 中的响应。我只是通过检查 json 响应是正确格式还是 html 格式来解决

      【讨论】:

        【解决方案4】:

        我遇到了同样的错误。原来错误在请求中。以下语法解决了向请求添加参数时的问题。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-11-17
          • 2016-09-19
          • 1970-01-01
          • 2018-02-20
          • 1970-01-01
          • 2017-06-24
          • 2016-08-28
          • 2013-12-18
          相关资源
          最近更新 更多