almofire
SwiftyJSON
Swift3.0

SwiftyJSONでちょっと階層深くしたときのやり方

More than 1 year has passed since last update.

概要

与えられるJSONはこんな感じで,hobbiesの部分のデータ取得方法がわからなかった.
そこについて説明する.

{
    "users":[
        {
            "name": "太郎",
            "age": 23,
            "hobbies": [
                {
                    "id": 1,
                    "name": "野球"
                },
                {
                    "id": 5,
                    "name": "ダーツ"
                },
                {
                    "id": 20,
                    "name": "缶蹴り"
                }
            ]
        },
        .
        .
        .
    ]
}

実際のコード

Alamofire.request(requestUrl).responseJSON{ response in
    switch response.result {
        case .success(let value):
            let json = JSON(value)
            json["users"].forEach{(_, data) in
                let name = data["name"].string!
                let age = data["age"].int!

                let hobbyList = data["hobbies"].array
                hobbyList?.forEach{(data) in
                    let hobbyId = data["id"].int!
                    let hobbyName = data["name"].string!
                }
            }
        case .failure(let error):
            print("エラーだよー")
    }
}

こんな感じで取得することが出来ます.

let hobbyList = data["hobbies"].array
ここが対象のところで,.arrayとすることで,jsonの"hobbies"のデータを取得しています.

.arrayObjectもあるのですが,"hobbies"の中身をオブジェクトに変換してしまい?:のところが=になり,上手く出来ませんでした.

.arrayの場合
{
    "id": 1,
    "name": "野球"
}
.arrayObjectの場合
{
    "id" = 1,
    "name" = "野球"
}