0

I have an odd problem. I'm getting some data back from an API and storing it in $response

The result looks like this (I've changed the names and IDs):

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}

I'm interested in the 'accountIdToNameMap' section, so I store it to an object like so:

$accounts = $response.accountIdToNameMap

This returns the following list:

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

If I try to do a foreach on the list, it only loops once and outputs that whole list in one go.

I've tried to ConvertFrom-JSON but that throws Invalid JSON primitive: .

I've tried to ConvertTo-JSON, which works, but I still can't loop through the results. After ConvertTo-JSON, the result looks like this:

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

What am I doing wrong?

1 Answer 1

3

If I try to do a foreach on the list

It's not a list, it's an object. You can enumerate its properties by accessing the hidden psobject member:

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

You can use this to build a hashtable (an unordered dictionary):

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

Now you can easily use it as a lookup table:

$idToNameMap['1234'] # resolves to "Apple"
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.