如何从 Powershell 脚本读取 JSON 数据并迭代它

Rok*_*545 5 powershell scripting json

我开始学习 Powershell,目前正在尝试读取 JSON 文件。

这是我的 JSON 文件(名为“versions.json”):

{
    "versions": {
        "1.0.0": {
            "Component1": "1.0.0",
            "Component2": "1.0.0",
            "Component3": "1.0.0",
        },
        "2.0.0": {
            "Component1": "2.0.0",
            "Component2": "2.0.0",
            "Component3": "2.0.0"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想读取这个 JSON 文件并打印出版本及其组成。例如,1.0.0 由 1.0.0 的组件 1、1.0.0 的组件 2 和 1.0.0 的组件 3 组成。

我目前正在使用以下 Powershell 行读取 JSON 文件:

$json = (Get-Content "versions.json" -Raw) | ConvertFrom-Json
Run Code Online (Sandbox Code Playgroud)

现在,我想迭代 $json 并打印出其数据。我目前正在使用这个:

foreach($v in $json.versions) {
    echo "Data: $v"
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行 Powershell 脚本时,它会打印:

Data: @{1.0.0=; 2.0.0=}
Run Code Online (Sandbox Code Playgroud)

这是正确的输出吗?我预计至少会看到 1.0.0 和 2.0.0 的两个条目。这感觉可能是语法问题,但我不确定。我正在使用 Powershell 版本 5。

Mar*_*agg 3

使用后,ConvertFrom-Json您将拥有一个 PowerShell 对象,该对象是一个具有属性的单个项目versions,该属性具有两个子属性1.0.02.0.0。您的 ForEach 尝试像集合一样迭代它们,但它只是一个对象。

但是,您可以按如下方式迭代属性以获得我认为您想要的结果:

 ($Json.versions.psobject.properties) | foreach-object { "Data: $($_.name)" }
Run Code Online (Sandbox Code Playgroud)