阅读 JSON 并在 Powershell 中迭代

Read JSON and Iterate in Powershell

我有一个 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"
    }
}

我正在尝试通过迭代在我的屏幕上阅读此 JSONPRINT。下面是我的 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

如果该格式不可更改,您可以使用:

$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"
    }
]

访问底层属性的值:

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