2015-11-17 14 views
2

這可能是我所遇到的最奇怪的事。我們已決定繼續,但我想發表一篇文章來嘗試和理解。斯威夫特NSJSONSerialization.JSONObjectWithData()無法讀取「OK」的字符串數據僅

所以我從我們的服務器抓取一些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」,它總是返回無法讀取數據。我見過的最奇怪的事情。現在我們要走的是「成功」的地位,但我無法從我的腦海中解脫出來。爲什麼?!?!那兩個字母有什麼不同?任何人遇到這個問題,或者只是有一種理解,我似乎缺乏?這讓我瘋狂。

這裏是我們的嘗試之一的JSON:

{ 「用戶名」: 「gang_su」, 「狀態」: 「0K」, 「狀態2」: 「這是更爲OK」, 「STATUS3」 :「OK OK」,「status4」:「OK」,「status5」:true,「status6」:123,「status7」:12345.678,「status8」:[1,2,3,4] :[1.02,2.02,3.02,4.02]}

謝謝!

+0

聽起來很瘋狂,你可以發佈你的原始json嗎? –

+0

是的。我添加了JSON到帖子。 –

+0

請注意,'確定'有單引號。請參閱:[JSON介紹(http://www.json.org))。 – zaph

回答

2
{ username: req.user.username, status: 'OK', status2: "This is much more OK" } 

上面的「JSON」在OK旁邊有單引號。這是無效的JSON。

這可不好,你可能會說。

他們需要的是雙引號,因爲你已經在你的其他字符串使用。

+0

是的,JSON是不正確的。對不起,我用我們正在使用的最新JSON更新了它。他添加了一堆東西來測試它。除status4之外,他們都工作 –

0

我只是在操場進行了測試,它正常工作與您提供的例子JSON。合乎邏輯的結論是,這不是真正要傳遞的數據。

您可能要轉儲的NSData到控制檯,或文件,並檢查是否有意外的字符。