Читать JSON и повторять в Powershell - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть файл JSON, в котором я сохранил несколько настроек. Ниже мой JSON-файл

{

    "1":{
        "foundation_name":"Pre-Prod1",
        "api_url": "https://sys1.com"
    },
    "2":{
        "foundation_name":"Pre-Prod2",
        "api_url": "https://sys-2.com"
    },
    "3":{
        "foundation_name":"Prod1",
        "api_url": "https://sys5.com"
    }
}

И я пытаюсь прочитать это JSON и PRINT на моем экране, повторяя его. Ниже мой Powershell скрипт

Function FoundationSettings {
    Write-Host 'Reading from File'
    $foundations = Get-Content ".\foundations.json" -Raw | ConvertFrom-Json
    Write-Host $foundations
    return $foundations
}

Function DisplayFoundations {
    $foundations = FoundationSettings
    foreach ($foundation in $foundations) {
        Write-Host 'here ..'
        Write-Host $foundation.foundation_name
    }

}

Но это просто печатается таким образом

Reading from File
@{1=; 2=; 3=}
here ..

Как это решить? Мне нужно проанализировать JSON, и по моему требованию я бы получил данные api_url и foundation_name

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Доступ к значению базовых свойств:

Function DisplayFoundations {
    $foundations = FoundationSettings
    foreach ($foundation in $foundations.psobject.Properties.Value) {
        Write-Host 'here ..'
        Write-Host $foundation.foundation_name
    }
}
0 голосов
/ 10 сентября 2018

Если этот формат неизменен, вы можете использовать:

$obj = @'
{

    "1":{
        "foundation_name":"Pre-Prod1",
        "api_url": "https://sys1.com"
    },
    "2":{
        "foundation_name":"Pre-Prod2",
        "api_url": "https://sys-2.com"
    },
    "3":{
        "foundation_name":"Prod1",
        "api_url": "https://sys5.com"
    }
}
'@ | ConvertFrom-Json

$listOfObjects = ($obj | Get-Member -MemberType NoteProperty).Name | % { $obj.$_ }

Если вы можете изменить его, используйте массив JSON, где массив больше подходит:

$listOfObjects | ConvertTo-Json

Что дает:

[
    {
        "foundation_name":  "Pre-Prod1",
        "api_url":  "https://sys1.com"
    },
    {
        "foundation_name":  "Pre-Prod2",
        "api_url":  "https://sys-2.com"
    },
    {
        "foundation_name":  "Prod1",
        "api_url":  "https://sys5.com"
    }
]
...