如何使用Power Shell解析JSON响应?

时间:2019-09-27 04:59:27

标签: powershell azure-powershell azure-automation azure-runbook invoke-webrequest

我正在寻找在azure Runbook上使用powershell解析的JSON respoonse。 以下是我的代码。

$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

以下是我的JSON响应

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

我从力量上得到了如上所述的JSOn响应,我可以读取包含{"NormalMktStatus":"open"}的response.content 但是如果我使用的是response.content.normalMKTstatus,那我将得到空白。 怎么解决呢? 而且我也想用功率壳来做if-else条件

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

1 个答案:

答案 0 :(得分:2)

如果您使用$result = Invoke-WebRequest ...,则$result.Content包含一个JSON string ,您首先需要将其解析为< em> objects ,以便能够使用点符号(.normalMktStatus)访问属性。

虽然您可以使用ConvertFrom-Json进行此解析,但使用
Invoke-RestMethod cmdlet更简单,它可以在后台执行JSON解析并直接返回一个对象(类型[pscustomobject])代表JSON内容

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

$obj.NormalMktStatus # -> 'open'

if ($obj.NormalMktStatus -eq 'open') {
  $true
}
else {
  $false 
}