如何从API访问嵌套字典

时间:2017-05-31 11:04:09

标签: ios swift api

假设我想从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

但它会在编译器中弹出下标错误。

我应该使用哪种数据模型来访问它?

2 个答案:

答案 0 :(得分:1)

您的JSON响应为Array而不是Dictionaryactive_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