Как разобрать массив внутри разбора 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, или я делаю что-то неправильно?
Ответы
Ответ 1
Доступ к словарю в Swift возвращает необязательный параметр, поэтому вам нужно принудительно использовать значение (или использовать синтаксис if let
).
Это работает:
parsedJSON["boards"]![0]
(Вероятно, это не должно приводить к краху Xcode)
Ответ 2
Взгляните сюда: https://github.com/lingoer/SwiftyJSON
let json = JSONValue(dataFromNetworking)
if let userName = json[0]["user"]["name"].string{
//Now you got your value
}
Ответ 3
Вы можете создать переменную
var myBoard: NSArray = parsedJSON["boards"] as! NSArray
а затем вы можете получить доступ к тем, что у вас есть в "досках", например -
println(myBoard[0])
Ответ 4
Правильный способ справиться с этим - проверить возврат из ключа словаря:
if let element = parsedJSON["boards"] {
println(element[0])
}