使用高阶功能从帐户中提取联系人 [英] extract contacts from account using High order function

查看:55
本文介绍了使用高阶功能从帐户中提取联系人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用高阶函数从帐户JSON对象提取联系人和帐户显示名称列表.我需要的是提取联系人的姓氏和名字并将其拼凑成一个数组

How I can extract contacts and account display name list from accounts JSON object using High order functions. what I need is contact first name and Lastname extracted and flaten in one array

我的迅捷物体

  struct Account: Codable {
        var accountID, displayName, managedByStakeholderID, id: String?
        var contacts: [Contact]?
    }
struct Contact: Codable {

    var firstName: String?
    var lastName: String?
}

JSON

    {
       "Accounts":[
          {
             "AccountID":"ef391c24-ad5b-4dca-98ae-b55793dfc029",
             "Contacts":[
                {
                   "AccountID":"ef391c24-ad5b-4dca-98ae-b55793dfc029",
                   "AvatarImage":"",
                   "ContactEmail":"cbacon@associates.com",
                   "ContactID":"f74d3810-625f-43d4-afd4-89346a73f807",
                   "ContactTitle":"Chief Executive Officer",
                   "DisplayName":"Ch  Bacon",
                   "FirstName":"Ch",
                   "LastName":"Baco",
                   "ManagedByStakeholderID":"97e5f0d5-df0d-48fe-bbbb-cccf251f4175",
                   "Notes":"OWNER",
                   "Roles":[
                      {
                         "RoleEnvironmentName":"",
                         "RoleEnvironmentTenantName":"",
                         "RoleID":"3a824b1e-26d6-41c5-8336-4b79f0962c38",
                         "RoleName":"Environment Administrator"
                      }
                   ],
                   "StakeholderID":"97e5f0d5-df0d-48fe-bbbb-cccf251f4175",
                   "id":"f74d3810-625f-43d4-afd4-89346a73f807"
                }
             ],
             "DisplayName":"Chris Associates Ltd."
          },
          {
             "AccountID":"C31ACAD6-0E5D-43E0-B1A2-E51FD46BFE3A",
             "Contacts":[
                {
                   "AccountID":"C31ACAD6-0E5D-43E0-B1A2-E51FD46BFE3A",
                   "AvatarImage":"http://www.image.com/",
                   "ContactEmail":"jhgjhg@njkjk.com",
                   "ContactID":"28fad61f-9a47-41db-888e-19d66de96638",
                   "ContactTitle":"",
                   "DisplayName":"fvdfvdf",
                   "FirstName":"dfvdfv",
                   "LastName":"dfvdfv",
                   "ManagedByStakeholderID":"97e5f0d5-df0d-48fe-bbbb-cccf251f4175",
                   "Notes":"",
                   "Roles":[
                      
                   ],
                   "StakeholderID":"43d3af87-fd21-404c-9af6-2998e401fcb8",
                   "id":"28fad61f-9a47-41db-888e-19d66de96638"
                }
             ],
             "DisplayName":"adidas "
          },
          {
             "AccountID":"A4FBDC11-AB07-47BD-8364-0B1D81D8E38F",
             "Contacts":[
                {
                   "AccountID":"A4FBDC11-AB07-47BD-8364-0B1D81D8E38F",
                   "AvatarImage":"http://www.image.com/",
                   "ContactEmail":"jeff@linkedin.com",
                   "ContactID":"c205d05d-c4cf-46b2-a9fd-e85af2f317b9",
                   "ContactTitle":"",
                   "DisplayName":"Jeff Weiner",
                   "FirstName":"Jeff",
                   "LastName":"Weiner",
                   "ManagedByStakeholderID":"97e5f0d5-df0d-48fe-bbbb-cccf251f4175",
                   "Notes":"",
                   "Roles":[
                      
                   ],
                   "StakeholderID":"c6fc9b6e-f857-4ca1-8352-dc55b05a9373",
                   "id":"c205d05d-c4cf-46b2-a9fd-e85af2f317b9"
                }
             ],
             "DisplayName":"LinkedIn. Inc "
          }
       ]
    }

推荐答案

您可以获取响应帐户属性和flatMap联系人:

You can get your response accounts property and flatMap the contacts:

struct Response: Decodable {
    let accounts: [Account]
    enum CodingKeys: String, CodingKey {
        case accounts = "Accounts"
    }
}


struct Account: Decodable {
    let accountID, displayName, managedByStakeholderID, id: String?
    let contacts: [Contact]
    enum CodingKeys: String, CodingKey {
        case accountID = "AccountID", displayName = "DisplayName", managedByStakeholderID = "ManagedByStakeholderID", id = "ID", contacts = "Contacts"
    }
}


struct Contact: Decodable {
    let firstName: String
    let lastName: String
    enum CodingKeys: String, CodingKey {
        case firstName = "FirstName", lastName = "LastName"
    }
}


let jsonResponse = """
{
      "Accounts":[
         {
            "AccountID":"ef391c24-ad5b-4dca-98ae-b55793dfc029",
            "Contacts":[
               {
                  "AccountID":"ef391c24-ad5b-4dca-98ae-b55793dfc029",
                  "AvatarImage":"",
                  "ContactEmail":"cbacon@cpb&associates.com",
                  "ContactID":"f74d3810-625f-43d4-afd4-89346a73f807",
                  "ContactTitle":"Chief Executive Officer",
                  "DisplayName":"Ch  Bacon",
                  "FirstName":"Ch",
                  "LastName":"Baco",
                  "ManagedByStakeholderID":"97e5f0d5-df0d-48fe-bbbb-cccf251f4175",
                  "Notes":"OWNER",
                  "Roles":[
                     {
                        "RoleEnvironmentName":"",
                        "RoleEnvironmentTenantName":"",
                        "RoleID":"3a824b1e-26d6-41c5-8336-4b79f0962c38",
                        "RoleName":"Environment Administrator"
                     }
                  ],
                  "StakeholderID":"97e5f0d5-df0d-48fe-bbbb-cccf251f4175",
                  "id":"f74d3810-625f-43d4-afd4-89346a73f807"
               }
            ],
            "DisplayName":"Chris Associates Ltd."
         },
         {
            "AccountID":"C31ACAD6-0E5D-43E0-B1A2-E51FD46BFE3A",
            "Contacts":[
               {
                  "AccountID":"C31ACAD6-0E5D-43E0-B1A2-E51FD46BFE3A",
                  "AvatarImage":"http://www.image.com/",
                  "ContactEmail":"a@mail.com",
                  "ContactID":"28fad61f-9a47-41db-888e-19d66de96638",
                  "ContactTitle":"",
                  "DisplayName":"fvdfvdf",
                  "FirstName":"dfvdfv",
                  "LastName":"dfvdfv",
                  "ManagedByStakeholderID":"97e5f0d5-df0d-48fe-bbbb-cccf251f4175",
                  "Notes":"",
                  "Roles":[
                     
                  ],
                  "StakeholderID":"43d3af87-fd21-404c-9af6-2998e401fcb8",
                  "id":"28fad61f-9a47-41db-888e-19d66de96638"
               }
            ],
            "DisplayName":"adidas "
         },
         {
            "AccountID":"A4FBDC11-AB07-47BD-8364-0B1D81D8E38F",
            "Contacts":[
               {
                  "AccountID":"A4FBDC11-AB07-47BD-8364-0B1D81D8E38F",
                  "AvatarImage":"http://www.image.com/",
                  "ContactEmail":"jeff@linkedin.com",
                  "ContactID":"c205d05d-c4cf-46b2-a9fd-e85af2f317b9",
                  "ContactTitle":"",
                  "DisplayName":"Jeff Weiner",
                  "FirstName":"Jeff",
                  "LastName":"Weiner",
                  "ManagedByStakeholderID":"97e5f0d5-df0d-48fe-bbbb-cccf251f4175",
                  "Notes":"",
                  "Roles":[
                     
                  ],
                  "StakeholderID":"c6fc9b6e-f857-4ca1-8352-dc55b05a9373",
                  "id":"c205d05d-c4cf-46b2-a9fd-e85af2f317b9"
               }
            ],
            "DisplayName":"LinkedIn. Inc "
         }
      ]
   }
"""


do {
    let contacts = try JSONDecoder().decode(Response.self, from: Data(jsonResponse.utf8)).accounts.flatMap(\.contacts)
    print(contacts) // [__lldb_expr_79.Contact(firstName: "Ch", lastName: "Baco"), __lldb_expr_79.Contact(firstName: "dfvdfv", lastName: "dfvdfv"), __lldb_expr_79.Contact(firstName: "Jeff", lastName: "Weiner")]
} catch { print(error) }

这篇关于使用高阶功能从帐户中提取联系人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆