PowerShell: возвращает объект JSON по значению поля
Рассмотрим JSON в этом формате:
"Stuffs": [
{
"Name": "Darts",
"Type": "Fun Stuff"
},
{
"Name": "Clean Toilet",
"Type": "Boring Stuff"
}
]
В PowerShell 3 мы можем получить список материалов:
$JSON = Get-Content $jsonConfigFile | Out-String | ConvertFrom-Json
Предполагая, что мы не знаем точное содержание списка, включая упорядочение объектов, как мы можем получить объект с определенным значением для поля Name?
Грубая сила, мы могли бы перебирать список:
foreach( $Stuff in $JSON.Stuffs ) {
Но я надеюсь, что существует более прямой механизм (похожий на выражения Lync или Lambda в С#).
Ответы
Ответ 1
$json = @"
{
"Stuffs":
[
{
"Name": "Darts",
"Type": "Fun Stuff"
},
{
"Name": "Clean Toilet",
"Type": "Boring Stuff"
}
]
}
"@
$x = $json | ConvertFrom-Json
$x.Stuffs[0] # access to Darts
$x.Stuffs[1] # access to Clean Toilet
$darts = $x.Stuffs | where { $_.Name -eq "Darts" } #Darts
Ответ 2
Я просто задал тот же вопрос: fooobar.com/questions/218091/...
Он имеет хорошее решение. Надеюсь, это поможет ^^.
В резюме вы можете использовать это:
Json файл в моем случае был вызван jsonfile.json
:
{
"CARD_MODEL_TITLE": "OWNER MANUAL",
"CARD_MODEL_SUBTITLE": "Configure your download",
"CARD_MODEL_SELECT": "Select Model",
"CARD_LANG_TITLE": "Select Language",
"CARD_LANG_DEVICE_LANG": "Your device",
"CARD_YEAR_TITLE": "Select Model Year",
"CARD_YEAR_LATEST": "(Latest)",
"STEPS_MODEL": "Model",
"STEPS_LANGUAGE": "Language",
"STEPS_YEAR": "Model Year",
"BUTTON_BACK": "Back",
"BUTTON_NEXT": "Next",
"BUTTON_CLOSE": "Close"
}
код:
$json = (Get-Content "jsonfile.json" -Raw) | ConvertFrom-Json
$json.psobject.properties.name
Вывод:
CARD_MODEL_TITLE
CARD_MODEL_SUBTITLE
CARD_MODEL_SELECT
CARD_LANG_TITLE
CARD_LANG_DEVICE_LANG
CARD_YEAR_TITLE
CARD_YEAR_LATEST
STEPS_MODEL
STEPS_LANGUAGE
STEPS_YEAR
BUTTON_BACK
BUTTON_NEXT
BUTTON_CLOSE
Благодаря mjolinor.
Ответ 3
Ответ Дэвида Брабанта привел меня к тому, что мне было нужно, с этим дополнением:
x.Stuffs | where { $_.Name -eq "Darts" } | Select -ExpandProperty Type
Ответ 4
Это мои данные JSON:
[
{
"name":"Test",
"value":"TestValue"
},
{
"name":"Test",
"value":"TestValue"
}
]
Сценарий Powershell:
$data = Get-Content "Path to json file" | Out-String | ConvertFrom-Json
foreach ($line in $data) {
$line.name
}
Ответ 5
Как насчет этого:
$json=Get-Content -Raw -Path 'my.json' | Out-String | ConvertFrom-Json
$foo="TheVariableYourUsingToSelectSomething"
$json.SomePathYouKnow.psobject.properties.Where({$_.name -eq $foo}).value
который будет выбирать из структурированных JSON
{"SomePathYouKnow":{"TheVariableYourUsingToSelectSomething": "Tada!"}
Это основано на этом доступе к значениям в вопросе powershell SO
, Разве это не невероятно!