Невозможно получить отдельные данные из данных 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')
Что вам нужно сделать, это сравнить массив с массивом, как в моем примере.