【问题标题】:How to capture JSON key and values as an array in powershell如何在powershell中将JSON键和值捕获为数组
【发布时间】:2021-08-14 09:14:55
【问题描述】:

我有一个 api 调用的 json 输出,部分如下所示。 作为这个 json 的一部分,列出了许多 id 和 name 值。现在,我想将 id 和 name 对一起捕获为一个数组,作为程序中某些步骤的一部分,我返回 name ,我想比较这个name 与之前存储在数组中的 name 并返回与其对应的 id 值。 因为我必须将此 id 值传递给另一个 rest api 调用。

有人可以帮助我如何通过 powershell 捕获这个数组吗?

$Json = '{
    "value": [
        {
            "id": "1",
            "name": "datafactory.git",
            "size": 0,
            "remoteUrl": "",
            "sshUrl": "",
            "webUrl": "",
            "isDisabled": false
        },
        {
            "id": "2",
            "name": "datafactory",
            "defaultBranch": "refs/heads/main",
            "size": 13569,
            "remoteUrl": "",
            "sshUrl": "",
            "webUrl": "",
            "isDisabled": false
        },
    ]
}'

【问题讨论】:

  • 我会从 ConvertFrom-Json 开始,让你的 Json 进入 powershell 对象并从那里开始。
  • 是的,我已经这样做了,但是如何将 id 和 name 作为一对捕获在一起,以便我可以将 name 与从脚本中获取的某个值进行比较并输出 id 值?跨度>

标签: json powershell azure-devops scripting azure-devops-rest-api


【解决方案1】:

我会为此创建一个hash table

($Json |ConvertFrom-Json).Value |ForEach-Object {
    $HashTable = @{}
} {
    $HashTable[$_.name] = $_.id
}

用法:

$HashTable.datafactory
2

您也可以考虑引用完整的 value 属性对象(而不仅仅是 id):

($Json |ConvertFrom-Json).Value |ForEach-Object {
    $HashTable = @{}
} {
    $HashTable[$_.name] = $_
}

用法:

$HashTable.datafactory.id
2

$HashTable.datafactory.size
13569

【讨论】:

  • 谢谢 iRon,我试图进行比较和打印,但我有一个问题..你能建议.. $reponame = "repo" if($reponame -eq $HashTable. $reponame){ echo $HashTable.$reponame.id } else{ echo "未比较" }
  • 抱歉回复晚了,我猜你其实是想看看reponame是否存在:if ($HashTable.Contains($reponame)) { $HashTable[$reponame].id } else { "$reponame doesn't exist" }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 2020-01-06
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
相关资源
最近更新 更多