Powershell - Получить массив ненулевых значений из полей в нескольких строках объекта PSObject (или нескольких элементов массива JSON)? - PullRequest
0 голосов
/ 29 января 2019

У меня есть такой JSON (который поступил из PSObject):

[
    {
        "cf_workflow_1":  1212,
        "cf_workflow_2":  null,
        "cf_workflow_3":  null
    },
    {
        "cf_workflow_1":  null,
        "cf_workflow_2":  9797,
        "cf_workflow_3":  null
    },
    {
        "cf_workflow_1":  6262,
        "cf_workflow_2":  null,
        "cf_workflow_3":  null
    }
]

Я хочу получить массив, который просто:

(1212,9797,6262)

Как мне поступитьо том, как это сделать?

Вот пример кода для работы:

$tickets = @"
        [
            {
                "cf_workflow_1":  1212,
                "cf_workflow_2":  null,
                "cf_workflow_3":  null
            },
            {
                "cf_workflow_1":  null,
                "cf_workflow_2":  9797,
                "cf_workflow_3":  null
            },
            {
                "cf_workflow_1":  6262,
                "cf_workflow_2":  null,
                "cf_workflow_3":  null
            }
        ]
"@

$ticketsObject = $tickets | ConvertFrom-Json 

#Show the ticket data
$ticketsObject | Format-Table -AutoSize

#Create an array to hold all the non-null workflow numbers
#It should eventually contain the value (1212,9797,6262)
$workflowNumbers = @()

#Not sure what to do here to return only the non-null workflow numbers as an array?
$workflowNumbers = $ticketsObject | foreach{$_}

1 Ответ

0 голосов
/ 30 января 2019

Это работает:

$ticketsObject | 
  ForEach-Object {$_.Psobject.properties | 
                 where-Object {$_.Name -like 'cf*' -and $_.Value } | select -expand Value}

Идея состояла в том, чтобы посмотреть на свойства каждого объекта (только cf *) и только те, которые имели значение, а затем просто получить значения.

...