假设我想从API访问嵌套字典响应,如以下格式:
(
{
"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";
};
}
)
我访问嵌套字典的代码:
let response = responseJSON as! [String: [String: Any]]]()
let projectId = response["project"]?["id"] as Int
let projectName = response["project"]?["name"] as String
但它会在编译器中弹出下标错误。
我应该使用哪种数据模型来访问它?
答案 0 :(得分:1)
您的JSON
响应为Array
而不是Dictionary
,active_upcoming_bookings
数组和project
字典位于您的响应数组的第一个字典中。
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
}
答案 1 :(得分:1)
试试这个
let mainDict = arrResponse[0] as! [String : Any]
let projectDict = mainDict["project"] as! [String : Any]
let strProjectID = projectDict["id"] as! Int