使用 PowerShell 解析 JSON 数组

cur*_*cab 5 api powershell json

我在使用 PowerShell 从 API 查询返回特定数据时遇到问题。我正在进行一个简单的 API 调用来获取用户,效果很好。

$Response = Invoke-RestMethod -uri $uri -Method GET -Headers $Headers
$Response
Run Code Online (Sandbox Code Playgroud)

该调用返回以下内容。

Total Sum   Users         Groups
----- ----- -----         ------
    1     1 @{123456789=} @{Test Users=System.Object[]; Global Users=System.Object[]...
Run Code Online (Sandbox Code Playgroud)

$Response.Users 返回以下内容

123456789
---------
@{name= Test Case; fullname=Test Tester Case; office=Area 51;....
Run Code Online (Sandbox Code Playgroud)

问题是数字“123456789”是一个唯一标识符,会随着每个用户的变化而变化。为了从每个用户那里提取所需的数据,我需要能够解析并获取该数字。

这是 $Response.Users 的 JSON 输出

{
    "123456789": {
      "name": "Test Case",
      "fullname": "Tester Test Case",
      "office": "Area 51",
      "country": "United States",
      "groups": [
        "Test Users",
        "Global Users",
        "Test OU"     
      ]
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

谢谢

Mar*_*ndl 5

您可以使用默认的 powershell 属性访问note 属性的名称PsObject并检索它的名称:

$json = 
@'
{
    "123456789": {
      "name": "Test Case",
      "fullname": "Tester Test Case",
      "office": "Area 51",
      "country": "United States",
      "groups": [
        "Test Users",
        "Global Users",
        "Test OU"     
      ]
    }
}
'@


$json | ConvertFrom-Json | ForEach-Object {$_.PsObject.Properties.Name}
Run Code Online (Sandbox Code Playgroud)

或者在你的情况下:

$Response.Users | ConvertFrom-Json | ForEach-Object {$_.PsObject.Properties.Name}
Run Code Online (Sandbox Code Playgroud)

应该可以解决问题;-)