0

I'm looking for parsing JSON respoonse with powershell ruuning on azure runbook., The following is my code.

$servicePrincipalConnection=Get-AutomationConnection -Name "AzureRunAsConnection"         
Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint | Write-Verbose

$uri = 'https://nseindia.com//emerge/homepage/smeNormalMktStatus.json'
$result = Invoke-WebRequest -Uri $uri -UseBasicParsing
Write-Output $result
$result = $result.Content
Write-Output $result
Write-Output $result.NormalMktStatus
Write-Output 'saranaraj kumar'
# Stop-AzStreamAnalyticsJob -Name SQLCDCProcessor -ResourceGroupName RealTimeAnalytics

The following is my JSON response

StatusCode        : 200
StatusDescription : OK
Content           : {"NormalMktStatus":"open"}
RawContent        : HTTP/1.1 200 OK
                    X-FRAME-OPTIONS: SAMEORIGIN
                    Pragma: no-cache
                    Connection: keep-alive
                    Content-Length: 26
                    Cache-Control: max-age=0, no-cache, no-store
                    Content-Type: application/json
                    Date: Fri, 27 ...
Forms             : 
Headers           : {[X-FRAME-OPTIONS, SAMEORIGIN], [Pragma, no-cache], [Connection, keep-alive], [Content-Length, 
                    26]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : 
RawContentLength  : 26
{"NormalMktStatus":"open"}
saranaraj kumar

From power i'm getting JSOn reponse as above, I can read response.content that contains {"NormalMktStatus":"open"} but if I'm using response.content.normalMKTstatus I'm getting empty space. how to resolve it? And also I wanna do if-else condition with power shell that is

if(response.content.normalMKTstatus -eq 'open')
    {
    write-output true
    }
    else
    {
    write-output false
    }
0

1 Answer 1

2

If you use $result =Invoke-WebRequest..., $result.Content contains a JSON string in your case, which you first need to parse into objects in order to be able to access properties with dot notation (.normalMktStatus).

While you could use ConvertFrom-Json to perform this parsing, it is simpler to use the
Invoke-RestMethod cmdlet, which performs the JSON parsing behind the scenes and directly returns an object (of type [pscustomobject]) representing the JSON content
:

$obj = Invoke-RestMethod https://nseindia.com//emerge/homepage/smeNormalMktStatus.json

$obj.NormalMktStatus # -> 'open'

if ($obj.NormalMktStatus -eq 'open') {
  $true
}
else {
  $false 
}
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.