Swift 2.0如何解析JSON?

4

我正在编写一个猜单词游戏,通过json文本文件将可能的单词加载到我的应用程序中。我尝试按照这个网站上其他人的例子操作,但在Xcode中出现了错误。

基于另一个回答,我尝试了下面的代码:

import Foundation

var error: NSError?
let jsonData: NSData = /* get your json data */

let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil,   error: &error) as NSDictionary

但是我在第四行的jsonDict出现错误,提示“调用可能会抛出异常,但未标记为try,并且错误未处理”,还有“类型JSONReadingOptions不符合协议NilLiteralConvertible”。

以下是我想解析的JSON文件:

{
“wordList” : {
    “difficulty” : “Easy”
    “list” : [
        “fireplace”,
        “apple”,
        “january”,
        “tooth”,
        “cookies”,
        “mysterious”,
        “essential”,
        “magenta",
        “darling”,
        “pterodactyl”
    ]}}

我希望能够访问我的列表数组并获取值。非常感谢您的任何帮助!
1个回答

5

在Swift 2中,您需要使用新的错误处理API,而不是传递对NSError的引用:

do {
  let jsonDict = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions(rawValue: 0)) as? NSDictionary
  if let jsonDict = jsonDict {
     // work with dictionary here
  } else {
     // more error handling
  }
} catch let error as NSError {
  // error handling
}

您也不能将nil作为值传递给options参数,需要传递NSJSONReadingOptions类型的值。

话虽如此,在Swift中解析JSON最常用的方法是使用第三方库,比如Argo,因为它们可以帮助您节省很多代码,这些代码是验证和安全地将JSON数据内容转换为正确的Swift类型所必需的。


好的,我明白了。那么解析这个文件会给我一个NSDictionary吗? - Jared
谢谢。Xcode告诉我需要使用try?标记该调用。 - Jared
不确定为什么。在我上面的示例中,调用JSONObjectWithData时有一个try - Ben-G
哦,我的错!谢谢!那么,一旦我解析了它,我是不是要使用.valueforkey("wordList")来获取我的对象? - Jared
是的,或者更好的做法是使用下标,例如 jsonDict["wordList"] - Ben-G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接