API结果未转换为powershell中的对象的问题

uplii1fm  于 2023-02-12  发布在  Shell
关注(0)|答案(1)|浏览(106)

我遇到了一个奇怪的问题。我从API中取回一些数据并将其存储在$response中
结果如下所示(我已经更改了名称和ID):

accountId           : 1234
secureScoreProgress : @{startDate=2022-12-12 00:00:00.000; endDate=2023-01-26 00:00:00.000; totalDays=2738; minScore=76; maxScore=534.18; averageScore=257.33; data=System.Object[]}
monitoredAccounts   : @{total=479; data=System.Object[]}
accountIdToNameMap  : @{1234=Apple; 5432=Microsoft; 2584=Tesla; 7533=Ben and Jerry; 7534=Micool Paul Inc; 7549=AGLX; 7558=Samsung}

我对“accountIdToNameMap”部分感兴趣,所以我将它存储到一个对象,如下所示:

$accounts = $response.accountIdToNameMap

这将返回以下列表:

1234 : Apple
5432 : Microsoft
2584 : Tesla
7533 : Ben and Jerry
7534 : Micool Paul Inc
7549 : AGLX
7558 : Samsung

如果我尝试对列表执行foreach,它只循环一次,并一次输出整个列表。
我尝试过ConvertFrom-JSON,但这会抛出无效的JSON原语:。
我尝试过ConvertTo-JSON,它可以工作,但是我仍然不能循环遍历结果。

{
    "1234":  "Apple",
    "5432":  "Microsoft",
    "2584":  "CH Hausmann",
    "7533":  "Hughes Fowler Carruthers",
    "7534":  "Tempest Resourcing",
    "7549":  "Cream UK Ltd",
    "7558":  "Illuminatis / Scout Data"
}

我哪里做错了?

qhhrdooz

qhhrdooz1#

如果我试着在清单上做一个foreach
它不是一个列表,而是一个 object。你可以通过访问隐藏的psobject成员来枚举它的 properties

foreach ($property in $accounts.psobject.Properties) {
    "The `$accounts object has a property named '$($property.Name)' with value '$($property.Value)'"
}

你可以用它来构建一个哈希表(一个无序字典):

$idToNameMap = @{}
foreach ($property in $accounts.psobject.Properties) {
    $idToNameMap[$property.Name] = $property.Value
}

现在,您可以轻松地将其用作查找表:

$idToNameMap['1234'] # resolves to "Apple"

相关问题