我正在使用Swift解析JSON字符串。這是代碼:使用Swift解析JSON字符串時出錯
var jsonStr = "..." // JSON string
var data = jsonStr.dataUsingEncoding(NSUTF8StringEncoding)
var error: NSError?
var array = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as [AnyObject]
而且這段代碼幾乎可以一直工作。但今天我試圖解析一個新的字符串輸入,但它在最後一行中崩潰了我的應用程序。我甚至無法看到「錯誤」變量中的錯誤消息......它在更新錯誤信息之前崩潰了。
,我試圖解析JSON字符串是在這裏:http://pastebin.com/wf6jtNhf
我相信,我的JSON字符串是有效的,原因有二:
- 我驗證使用輸入jsonlint.com
- 我創建的代碼的Objective-C的版本上面,它成功地解析相同的輸入
任何人都可以明白了一個道理,爲什麼我不能相提並論選擇這個字符串還是應該假設NSJSONSerialization類在Swift中被竊聽?我使用Xcode的測試版3
編輯1:
顯然有在我的字符串(表情符)很多UTF-16字符。有沒有一個關鍵字來解析保存這些字符的字符串?我試圖NSUTF16StringEncoding
下面的代碼,但沒有奏效:
var data = jsonStr.dataUsingEncoding(NSUTF16StringEncoding)
編輯2:
我在蘋果開發者論壇上張貼了這個同樣的問題,顯然也的確是在斯威夫特的錯誤當數據中有表情符號時,NSJSONSerialization.JSONObjectWithData()
的版本。我希望這在最終版本中得到解決。
此外,將我的變量從[AnyObject]
更改爲as? Dictionary
,如下面的一些建議,並沒有讓我的應用程序崩潰。
有沒有人意識到,超過一半的問題是關於解析JSON或XML? – Jack
在這種情況下,它看起來像你的JSON將返回一個字典,而不是一個數組。 – Jack
@JackWu它是一個[AnyObject]的數組,所以它沒關係。我之前用[AnyObject]解析了類似複雜的JSON,它工作正常,我不認爲這是問題。另外,我上面的代碼的Objective-C版本將結果發送給一個NSArray,它也起作用。儘管如此,感謝您的快速響應。 – vegidio