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
}