Невозможно получить отдельные данные из данных JSON

"Ns": {
    "value": [
        {
            "Nname": "exa",
            "SR": [
                {
                    "name": "port1",
                    "properties": {
                        "description": "Allow port1",
                        "destinationPortRange": "1111",
                        "priority": 100
                    }
                },
                {
                    "name": "port1_0",
                    "properties": {
                        "description": "Allow port1",
                        "destinationPortRange": "1111",
                        "priority": 150
                    }
                },
                {
                    "name": "port2",
                    "properties": {
                        "description": "Allow  1115",
                        "destinationPortRange": "1115",
                        "priority": 100,
                    }
                }
            ]
        }
    ]
}

Хотел отстаивать детали приоритета и имени, но не смог этого сделать.

Вот что я реализовал:

$Ndetails = templateProperties.parameters.Ns.value.SR
foreach ($Ndata in $Ndetails) {
    $Ndata .properties.destinationPortRange |
        Should -BeExactly @('1111','1111','1115')
} 

Как решить то же самое с помощью Pester в PowerShell?

1 ответ

Решение

Вам не нужно использовать foreach за это. Вы можете просто использовать Select-Object за это. Предполагая, что ваш JSON имеет вид Mark Wragg, связанный в комментариях:

$Json = @'
[{
    "Ns": {
        "value": [{
            "Nname": "exa",
            "SR": [{
                    "name": "port1",
                    "properties": {
                        "description": "Allow port1",
                        "destinationPortRange": "1111",
                        "priority": 100
                    }
                },
                {
                    "name": "port1_0",
                    "properties": {
                        "description": "Allow port1",
                        "destinationPortRange": "1111",
                        "priority": 150
                    }
                },
                {
                    "name": "port2",
                    "properties": {
                        "description": "Allow  1115",
                        "destinationPortRange": "1115",
                        "priority": 100
                    }
                }
            ]
        }]
    }
}]
'@

$t = $Json | ConvertFrom-Json

Ваш тестовый файл должен выглядеть так:

$result = $t.Ns.value.SR.properties.destinationPortRange
it 'destinationPortRange matches' {
  $result | Should -BeExactly @('1111','1111','1115')
}

объяснение

Ваше использование foreach было неверно, так как вы сравнивали один элемент (также обратите внимание, что я удалил ненужное место)

$Ndata.properties.destinationPortRange

в массив

| Should -BeExactly @('1111','1111','1115')

Что вам нужно сделать, это сравнить массив с массивом, как в моем примере.

Другие вопросы по тегам