我使用的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 6的错误,还是我做错了什么?
答案 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])
}