Подтвердить что ты не робот

Как разобрать массив внутри разбора 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, или я делаю что-то неправильно?

4b9b3361

Ответ 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])
    }