我正在寻找在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
}
答案 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
}