简体   繁体   中英

How to access a nested dictionaries from API

Let's say that I want to access an nest dictionary response from API like this format:

(
    {
    "active_upcoming_bookings" =         (
                    {
            "booked_from" = "2018-03-01T00:00:00.000+08:00";
            "booked_to" = "2018-03-23T23:59:59.999+08:00";
            "creator_id" = 1;
            "desk_id" = 75;
            "desk_name" = D2;
            "desk_type" = Standing;
            id = 299;
            "project_id" = 8;
            "project_name" = "expo 2017";
            status = Upcoming;
            "user_id" = 11;
            wing = Right;
        },
                    {
            "booked_from" = "2018-03-01T00:00:00.000+08:00";
            "booked_to" = "2018-03-23T23:59:59.999+08:00";
            "creator_id" = 1;
            "desk_id" = 74;
            "desk_name" = D3;
            "desk_type" = Standing;
            id = 300;
            "project_id" = 8;
            "project_name" = "expo 2017";
            status = Upcoming;
            "user_id" = 12;
            wing = Right;
        },
                    {
            "booked_from" = "2018-03-01T00:00:00.000+08:00";
            "booked_to" = "2018-03-01T23:59:59.999+08:00";
            "creator_id" = 1;
            "desk_id" = 76;
            "desk_name" = D1;
            "desk_type" = Standing;
            id = 298;
            "project_id" = 8;
            "project_name" = "expo 2017";
            status = Upcoming;
            "user_id" = 16;
            wing = Right;
        }
    );
    project =         {
        "created_at" = "2017-05-31T16:29:06.012+08:00";
        "created_by_id" = 1;
        "end_date" = "2018-03-23T23:59:59.999+08:00";
        id = 8;
        name = "expo 2017";
        "start_date" = "2018-03-01T00:00:00.000+08:00";
        "updated_at" = "2017-05-31T16:29:06.012+08:00";
    };
}
)

My code for access the nested dictionary:

let response = responseJSON as! [String: [String: Any]]]()

let projectId = response["project"]?["id"] as Int
let projectName = response["project"]?["name"] as String

but it pops up subscript error in compiler.

What kind of data model should I use for access this?

Your JSON response is Array not Dictionary and active_upcoming_bookings array and project dictionary is within the first dictionary of your response Array.

if let response = responseJSON as? [[String:Any]], let dictionary = response.first, 
    let projectDic = dictionary["project"] as? [String:Any] {

      //Now subscript with projectDic to access id and name
      let projectId = projectDic["id"] as? Int
      let projectName = projectDic["name"] as? String
}

Try this

 let mainDict = arrResponse[0] as! [String : Any]
 let projectDict = mainDict["project"] as! [String : Any]
 let strProjectID = projectDict["id"] as! Int

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM