Home > Software engineering >  How to change a powershell Invoke-RestMethod body from its original format into something else
How to change a powershell Invoke-RestMethod body from its original format into something else

Time:06-23

I have a param section of a Invoke-RestMethod that i have to keep as is, but also add parameters:

$param = @{
...
Body = '{"entry":[{"@name":SOMETEXT,"static":{"member":[ANOTHERTEXT]}}]}' 
...
}

Since the entire Body is in single quotes, any $parameter added will be treated like a string instead of a normal PowerShell parameter

In this case SOMETEXT and ANOTHERTEXT will be $HubAddressObject and $ArrayList, respectivly.

How do i make that Body entry work with parameters, and keeping the same structure (this is part of a Panorama box)?

What i would need would be:

Body = '{"entry":[{"@name":$HubAddressObject,"static":{"member":[$ArrayList]}}]}'

Thanks.

CodePudding user response:

I'd recommend using ConvertFrom-Json / ConvertTo-Json for that kind of thing.

To keep it one 1 line, you can use the -Compress switch.

$params = @{
  Body = '{"entry":[{"@name":"SOMETEXT","static":{"member":"[ANOTHERTEXT]"}}]}' 
}

# Create a PSObject representation of your JSON
$jsonObj = $Params.body | ConvertFrom-Json

#Modify whatever you want
$jsonObj.entry[0].'@name' = 'NewText'

# Convert the Object back to Json.
$Params.Body = $JsonObj | Convertto-Json -Compress -Depth 4

Json comparison

# Starting off Json
{"entry":[{"@name":"SOMETEXT","static":{"member":"[ANOTHERTEXT]"}}]}
# Modified JSON
{"entry":[{"@name":"NewText","static":{"member":"[ANOTHERTEXT]"}}]}
  • Related