Подтвердить что ты не робот

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 в С#).

4b9b3361

Ответ 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 , Разве это не невероятно!