Используя Powershell Scipt, следующий json покажет на CSV - PullRequest
0 голосов
/ 24 мая 2019

JSON

{
    "members":  [
                    {
                        "id":  "4b3556f1-df58-6c3c-848b-022fc6a8668d",
                        "user":  "@{subjectKind=user; metaType=member; domain=2161a74d-1c3e-4d34-a8c8-131360d2e92c; principalName=abc@my.com; mailAddress=abc.xyz@my.com; origin=aad; originId=bc20990e-cf30-4c37-9e4b-b04e37ab2b04; displayName=ABC; }",
                        "accessLevel":  "@{licensingSource=account; accountLicenseType=express; msdnLicenseType=none; licenseDisplayName=Basic; status=active; statusMessage=; assignmentSource=unknown}",
                        "lastAccessedDate":  "2019-05-23T05:54:25.14Z",
                        "dateCreated":  "2019-05-23T05:54:21.6Z",
                        "projectEntitlements":  "",
                        "extensions":  "",
                        "groupAssignments":  ""
                    },
                    {
                        "id":  "4c07118c-8dc0-4e85-97a5-5501003d620d",
                        "user":  "@{subjectKind=user; domain=2161a74d-1c3e-4d34-a8c8-131360d2e92c; principalName=xyz@gmail.com; mailAddress=xyz@gmail.com; origin=aad; originId=; displayName=xyz}",
                        "accessLevel":  "@{licensingSource=account; accountLicenseType=stakeholder; msdnLicenseType=none; licenseDisplayName=Stakeholder; status=pending; statusMessage=; assignmentSource=unknown}",
                        "lastAccessedDate":  "0001-01-01T00:00:00Z",
                        "dateCreated":  "2019-05-23T10:05:41.663Z",
                        "projectEntitlements":  "",
                        "extensions":  "",
                        "groupAssignments":  ""
                    }
                ],
    "continuationToken":  "",
    "totalCount":  2 }

В CSV я хочу следующий вывод:

id                                     principalName       licenseDisplayName    

4b3556f1-df58-6c3c-848b-022fc6a8668d    abc@my.com         Basic    

1 Ответ

1 голос
/ 24 мая 2019

Это можно сделать, используя Select-Object, Select-String с шаблоном Regex и ConvertTo-Csv.

$j = @"
{
    "members":  [
                    {
                        "id":  "4b3556f1-df58-6c3c-848b-022fc6a8668d",
                        "user":  "@{subjectKind=user; metaType=member; domain=2161a74d-1c3e-4d34-a8c8-131360d2e92c; principalName=abc@my.com; mailAddress=abc.xyz@my.com; origin=aad; originId=bc20990e-cf30-4c37-9e4b-b04e37ab2b04; displayName=ABC; }",
                        "accessLevel":  "@{licensingSource=account; accountLicenseType=express; msdnLicenseType=none; licenseDisplayName=Basic; status=active; statusMessage=; assignmentSource=unknown}",
                        "lastAccessedDate":  "2019-05-23T05:54:25.14Z",
                        "dateCreated":  "2019-05-23T05:54:21.6Z",
                        "projectEntitlements":  "",
                        "extensions":  "",
                        "groupAssignments":  ""
                    },
                    {
                        "id":  "4c07118c-8dc0-4e85-97a5-5501003d620d",
                        "user":  "@{subjectKind=user; domain=2161a74d-1c3e-4d34-a8c8-131360d2e92c; principalName=xyz@gmail.com; mailAddress=xyz@gmail.com; origin=aad; originId=; displayName=xyz}",
                        "accessLevel":  "@{licensingSource=account; accountLicenseType=stakeholder; msdnLicenseType=none; licenseDisplayName=Stakeholder; status=pending; statusMessage=; assignmentSource=unknown}",
                        "lastAccessedDate":  "0001-01-01T00:00:00Z",
                        "dateCreated":  "2019-05-23T10:05:41.663Z",
                        "projectEntitlements":  "",
                        "extensions":  "",
                        "groupAssignments":  ""
                    }
                ],
    "continuationToken":  "",
    "totalCount":  2 }
"@ | ConvertFrom-Json

$j.members | Select-Object id,
    @{n='principalName';e={($_.user | 
       Select-String "(?<=principalname=).*?(?=;)").matches.value}},
    @{n='licenseDisplayName';e={($_.accessLevel |
       Select-String "(?<=licenseDisplayName=).*?(?=;)").matches.value}} | 
    ConvertTo-Csv -NoTypeInformation

. Вы можете просто удалить | ConvertTo-Csv, если вы хотите табличное отображение вconsole.

Несколько альтернативным подходом было бы удалить окружающее @{} из свойства, к которому вы хотите получить доступ, и затем использовать ConvertFrom-StringData для возврата хеш-таблицы со значениями под-свойств, к которым вы можете легко получить доступ.

$j.members | Select-Object id,
    @{n='principalName';e={($_.user -replace "^@{|}$" -split ';' |
        ConvertFrom-StringData).principalName}},
    @{n='licenseDisplayName';e={($_.accesslevel -replace "^@{|}$" -split ';' |
        ConvertFrom-StringData).licenseDisplayName}} |
    ConvertTo-Csv -NoTypeInformation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...