Как использовать SwiftyJSON для вложенных значений JSON

Я вызываю JSON API, который имеет несколько вложенных значений, которые мне нужно получить. Я использую SwiftyJSON, чтобы сделать все немного чище. Для значений верхнего уровня все работает нормально, но на более глубоком уровне я получаю ужасный «ноль при развертывании необязательного значения».

Вот как я делаю вызов API с помощью Alamofire:

Alamofire.request(APIRequests.Router.Nearby(self.page)).responseJSON(){
        (_,_,json,_) in
        println(json)
        if (json != nil){
            var jsonObj = JSON(json!)

            if let userArray = jsonObj ["results"].array {

                for userDict in userArray {
                        var username: String! = userDict["username"].string
                        var firstName: String! = userDict["firstName"].string
                        var profileImage: String! = userDict["userImages"]["profile"]["filename"].string
                        var characterName: String! = userDict["characters"]["characterName"].string

                        var user = User(username: username, profileImage: profileImage, firstName: firstName, characterName: characterName)

                        self.users.append(user)
                    }
                }

Вот пример JSON:

{
  userInfo: {
     something: "abc",
     requestType: "GET"
  },
  results: [
    {
     username: "Jess",
     firstName: "Jessica",
     userImages: {
        profile: [
           {
            userImageID: "6",
            filename: "user-07.jpg"
           }
        ],
        cover: [
           {
            userImageID: "15",
            filename: "user-07.jpg"
           }
        ]
     },
     characters: [
         {
          userCharacterID: "8",
          characterName: "Amelia",
         }
     ]
}

Для ключей верхнего уровня username и firstName отладчик показывает правильные значения, однако, как только я погружаюсь немного глубже, чтобы получить profileImage или characterName, они возвращаются как nil, хотя печать json показывает значения для этих ключей.

Что я делаю не так? Я просто не вижу этого.

Любые мысли будут полезны. Спасибо.


person Nate Witty    schedule 30.07.2015    source источник


Ответы (1)


Пытаться

var profileImage: String! = userDict["userImages"]["profile"][0]["filename"].string

var characterName: String! = userDict["characters"][0]["characterName"].string

и дайте нам знать, что это дает.

person iRiziya    schedule 31.07.2015
comment
Да! Спасибо. Я знал, что это должно быть что-то простое. - person Nate Witty; 31.07.2015
comment
Вы также должны иметь возможность использовать сокращенную форму нижнего индекса: let characterName = json["characters",0,"characterName"].string - person Kyle Goslan; 07.08.2015