如何在Swift中解析解析后的JSON中的数组?

时间:2014-06-03 22:54:53

标签: ios json swift

我使用的API返回看起来像这样的JSON

{
   "boards":[
      {
         "attribute":"value1"
      },
      {
         "attribute":"value2"
      },
      {
         "attribute":"value3",
      },
      {
         "attribute":"value4",
      },
      {
         "attribute":"value5",
      },
      {
         "attribute":"value6",
      }
   ]
}

在Swift中我使用两个函数来获取然后解析JSON

func getJSON(urlToRequest: String) -> NSData{
    return NSData(contentsOfURL: NSURL(string: urlToRequest))
}

func parseJSON(inputData: NSData) -> NSDictionary{
    var error: NSError?
    var boardsDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
    return boardsDictionary
}

然后我用

调用它
var parsedJSON = parseJSON(getJSON("link-to-API"))

JSON被解析得很好。当我打印出来

println(parsedJSON["boards"])

我得到了数组的所有内容。但是我无法访问每个索引。我很肯定它是一个阵列,因为我做了

parsedJSON["boards"].count

返回正确的长度。但是,如果我尝试使用

访问各个索引
parsedJSON["boards"][0]

XCode关闭语法高亮显示并给我这个:

XCode Error

并且代码不会编译。

这是XCode 6的错误,还是我做错了什么?

4 个答案:

答案 0 :(得分:20)

Swift中的字典访问返回一个Optional,因此您需要强制使用该值(或使用if let语法)来使用它。

这有效: parsedJSON["boards"]![0]

(但可能不应该让Xcode崩溃)

答案 1 :(得分:9)

看看这里:https://github.com/lingoer/SwiftyJSON

let json = JSONValue(dataFromNetworking)
if let userName = json[0]["user"]["name"].string{
    //Now you got your value
}

答案 2 :(得分:6)

您可以创建变量

var myBoard: NSArray = parsedJSON["boards"] as! NSArray

然后你可以访问“董事会”中的任何内容,如 -

println(myBoard[0])

答案 3 :(得分:4)

处理此问题的正确方法是检查字典键的返回值:

    if let element = parsedJSON["boards"] {
        println(element[0])
    }