#powershell-4.0
#powershell-4.0
Вопрос:
У меня есть json следующим образом
{
"cluster": [
{
"id": "cluster1.1",
"color": "blue",
"segment": [
{
"id": "segment1.1",
"color": "green"
}
]
},
{
"id": "cluster1.2",
"color": [
"blue",
"red"
],
"segment": [
{
"id": "segment1.2",
"color": "Yellow"
}
]
},
{
"id": "cluster1.3",
"color": "Orange",
"segment": [
{
"id": "cluster1.3",
"color": "black"
},
{
"id": "cluster1.4",
"color": "Green"
},
{
"id": "cluster1.5",
"color": "red"
}
]
},
{
"id": "cluster1.4",
"color": [
"blue",
"red"
],
"segment": [
{
"id": "cluster1.4",
"color": "red"
},
{
"id": "cluster1.5",
"color": "blue"
},
{
"id": "cluster1.6",
"color": "Yellow"
}
]
}
]
}
Я хотел бы рекурсивно выполнить цикл по всем узлам, я получаю содержимое следующим образом со следующим кодом, но я не просматриваю все узлы
$jsonData = (Get-Content -FilePath) -join "`n" | ConvertFrom-Json
for( $i=0; $i -lt $jsonData.cluster.Length; $i )
{
$clusterInfo= $ReportingPackage.cluster[$i]
$clusterInfo.Color
}
Мне нужно рекурсивно найти способ перебирать все сегменты и цвета
Ответ №1:
Массив.Сокращение ElementProperty извлекает свойства только для непосредственных элементов массива. Перечислите свойства вложенных элементов вручную:
ForEach ($cluster in $jsonData.cluster) {
$cluster.color
$cluster.segment.color
}
Возможно, вы захотите использовать проверку работоспособности: if ($cluster.segment) { $cluster.segment.color }
Для сбора всех цветов в массив простейшим методом является конвейер:
$allColors = $jsonData.cluster | ForEach {
$_.color
$_.segment.color
}
Комментарии:
1. Привет, спасибо, когда я пытаюсь получить уникальные цвета без дублирования, которые я не могу получить
$allColors.color| select -Unique
, можете ли вы мне помочь2. 1. Это другой вопрос. 2. Обязательно всегда проверяйте содержимое ваших данных в PowerShell ISE или console, потому что мой второй пример создает массив простых строк без
.color
свойства:$allColors | select -unique