【问题标题】:Swift NSJSONSerialization.JSONObjectWithData() not able to read data for "OK" String onlySwift NSJSONSerialization.JSONObjectWithData() 无法仅读取“OK”字符串的数据
【发布时间】:2015-11-17 23:11:50
【问题描述】:

这可能是我遇到的最奇怪的事情。我们已经决定继续前进,但我想发表一篇文章来尝试理解。

所以我从我们的服务器获取了一些 JSON 数据,除了字符串“OK”之外,一切似乎都运行良好。

这里是函数:

func getRequest(token:String, url:String, callback:(NSDictionary) -> ()){
    let request = NSMutableURLRequest(URL: NSURL(string: url)!)
    request.HTTPMethod = "GET"
    request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in

        if data != nil && response != nil{
            do{
                let responseTest = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary
                if responseTest != nil{
                    let response:NSDictionary = responseTest!
                    callback(response)
                }
            } catch let error as NSError{
                print("A JSON parsing error occured: \(error)")

            }
        } else {
            callback(NSDictionary())
        }
    }
    task.resume()
}

数据从调用中返回,然后响应正确解析所有数据,除了状态“OK”返回时无法读取数据。我们将状态更改为“成功”,它工作得很好。我们测试了一堆不同的词,它们都工作得很好,除了“OK”这个词总是返回无法读取数据。我见过的最奇怪的事情。现在我们将进入“成功”状态,但我就是无法忘记这一点。为什么?!?!这2个字母有什么不同?有其他人遇到过这种情况,或者只是对我似乎缺乏了解吗?快把我逼疯了。

这是我们的一次尝试中的 JSON:

{"username":"gang_su","status":"0K","status2":"这更OK","status3":"OK OK OK","status4":"OK", "status5":true,"status6":123,"status7":12345.678,"status8":[1,2,3,4],"status9":[1.02,2.02,3.02,4.02]}

谢谢!!

【问题讨论】:

  • 听起来很疯狂,你能发布你的原始 json 吗?
  • 是的。我将 JSON 添加到帖子中。
  • 请注意,'OK' 有单引号。请参阅:Introducing JSON
  • 很抱歉。我从一封电子邮件中获取了那个 JSON……不知道为什么会有单引号。以为我的朋友直接从代码中复制了它。我现在使用当前来自服务器的 JSON 对其进行了更新。我直接从浏览器的查看源页面复制了它。
  • 太好了,更新的 JSON 是有效的。但是那个 JSON 并没有体现出你描述的问题。如果没有reproducible example 的问题,我们将无法帮助您。在回答您的问题时,“OK”绝对没有什么特别之处,而是在您的代码(或服务器响应)中的其他地方有其他东西。

标签: ios json swift


【解决方案1】:
{ username: req.user.username, status: 'OK', status2: "This is much more OK" }

上面的“JSON”在 OK 周围有单引号。这是无效的 JSON。

这不好,你可能会说。

它们必须是双引号,就像您在其他字符串中使用的那样。

【讨论】:

  • 是的,JSON 不正确。抱歉,我已经用我们正在使用的最新 JSON 更新了它。他添加了一堆东西来测试它。除了 status4 之外,它们都可以工作
【解决方案2】:

我刚刚在操场上对此进行了测试,它与您提供的示例 JSON 配合得很好。合乎逻辑的结论是,这实际上不是您传入的数据。

您可能希望将该 NSData 转储到控制台或文件中,并检查是否有任何意外字符。

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    相关资源
    最近更新 更多