如何在powershell中解析json响应

Cla*_*ioM 1 iteration powershell invoke-command

设法获得JSON数据

$R= Invoke-WebRequest -Uri $url -Headers $headers -ContentType "application/json"   -Method Get -UseBasicParsing
$x = $R.Content | Out-String | ConvertFrom-Json 
Run Code Online (Sandbox Code Playgroud)

现在我有一个像这样的JSON文件:

{
  "id": 1000,
  "name_with_namespace": "myProjectName1",

},
{
  "id": 1001,
  "name_with_namespace": "myProjectName2",

},
{
  "id": 1002,
  "name_with_namespace": "myProjectName3",

}
Run Code Online (Sandbox Code Playgroud)

现在我需要提取所有出现的地方"name_with_namespace""id"地点"name_with_namespace" = "myProjectName.*"

我该如何一次性完成?

我试过这个:

foreach ($name in $x.name_with_namespace) {
    if ( $name -match ".*myProjectName.*" ) {    
        write-host "$name - $x.id"               
    }   
}
Run Code Online (Sandbox Code Playgroud)

但我得到了这个:

myProjectName1 1000 1001 1002
myProjectName2 1000 1001 1002
myProjectName3 1000 1001 1002
Run Code Online (Sandbox Code Playgroud)

我知道问题出在$ x.id上,我怎样才能获得正确的价值而不是一切?

我的预期输出是

myProjectName1 1000
myProjectName2 1001
myProjectName3 1002
Run Code Online (Sandbox Code Playgroud)

The*_*ian 7

在定义循环时,您正在向下钻取一个级别.只需迭代$x然后检查循环内的特定属性.

foreach ($name in $x) {
    if ( $name.name_with_namespace -match ".*myProjectName.*" ) {    
        write-host "$($name.name_with_namespace) - $($name.id)"               
    }   
}
Run Code Online (Sandbox Code Playgroud)

编辑:在旁注中,您可以将您简化-match为公正"myProjectName",它也可以正常工作,并且可能更快.