Jul 27 2021 11:27 AM
I am pulling back some JSON formatted data via Invoke-RestMethod.
I am trying to figure out how to get that data into usable format so that I can use the returned data in If else statements further down in the script I am using. The data is formatted such as when I use the following commands.
$searchResultsResponse = Invoke-RestMethod -Method POST -Uri $searchUri -ContentType application/json -Header $requestHeader -Body $searchResultsRequest
$searchResultsResponse.businessObjects.fields
DisplayName Value
Incident 1
Location NC
Status 4
Incident 2
Location NC
Status 2
Jul 28 2021 01:31 AM - edited Jul 28 2021 05:40 AM
Without seeing the actual JSON layout and what you want to use in the If clause we can't really help you.
But Invoke-RestMethod should automatically convert any JSON to a PSCustomObject which you should be able to use in any If/Else clause.
Jul 28 2021 05:12 AM
Jul 28 2021 05:38 AM
I don't think there is a direct way of parsing the inner fields to a PSCustomObject.
The following should do the trick and give you a PSCustomObject to work with:
# $JSON is the result from your Invoke-WebRequest
ForEach($entry in $JSON)
{
$newFields = @()
$rawFields = $entry.Fields
ForEach($rawField in $rawFields)
{
$parameters = [PSCustomObject]@{}
# Remove first 2 letters (as they are '@{') and the last '}'
$rawField = $rawField.Substring(2, $rawField.Length - 4)
# Parameters seem to be splitted by a ';'
$rawParameters = $rawField -split ';'
ForEach($pair in $rawParameters)
{
# Key = Value
$split = $pair -split '='
# Trim the start as after the ';' a space occurs
$name = $split[0].TrimStart()
# Skip empty pairs
If([String]::IsNullOrEmpty($name))
{
Continue
}
$parameters | Add-Member -NotePropertyName $name -NotePropertyValue $split[1]
}
$newFields += $parameters
}
# Override original Fields entry
$entry.Fields = $newFields
}