У меня есть файл json, который имеет содержимое ниже. Я хочу перебирать каждый элемент (используя цикл foreach) в Powershell. Как мне это сделать?
{
"abc": {
"isSecret": null,
"value": "'167401'"
},
"dar": {
"isSecret": null,
"value": "8980"
},
"hgt": {
"isSecret": null,
"value": "893240"
},
"newvar1": {
"isSecret": null,
"value": "newvalue1"
},
"var": {
"isSecret": null,
"value": "1230"
}
}
Версия PS: 5.1.19041.1682
ConvertFrom-Json
.
Powershell 7 имеет пары «имя-значение» с convertfrom-json -AsHashtable
Вы можете сделать что-то вроде:
$input = @'
<your input here>
'@
$json = $input | ConvertFrom-Json
foreach($item in $json.PSObject.Properties)
{
Write-Output $item.Name
Write-Output $item.Value.isSecret
Write-Output $item.Value.value
}
с вашим вкладом это дает мне:
abc
'167401'
dar
8980
hgt
893240
newvar1
newvalue1
var
1230
поскольку все ваши значения isSecret
равны нулю, они не отображают никакого контента.
Я хочу получить «.isSecret» и «.value» для каждого элемента. Там в любом случае ?
Я отклонил этот ответ, потому что он создает иллюзию повторения элементов корневого объекта, но на самом деле это не так.
@MathiasR.Jessen, честно говоря, я только что понял, что ввод представляет собой объект, а не список. будет обновляться.
Во всяком случае, ваш ответ удовлетворяет моим требованиям. Большое спасибо @TZHX.
$Data = $Json |ConvertFrom-Json
$Data.PSObject.Properties.Value
isSecret value
-------- -----
'167401'
8980
893240
newvalue1
1230
Чтобы перебрать значения:
$Data.PSObject.Properties.Value.ForEach{
Write-Host 'isSecret:' $_.isSecret
Write-Host 'Value:' $_.Value
}
Версия Powershell 7 с парами имя, значение:
cat file.json | convertfrom-json -AsHashtable
Name Value
---- -----
hgt {isSecret, value}
newvar1 {isSecret, value}
dar {isSecret, value}
abc {isSecret, value}
var {isSecret, value}
какую версию powershell вы используете?