Как разобрать ответ JSON с помощью Power Shell? - PullRequest
0 голосов
/ 27 сентября 2019

Я ищу синтаксический анализ JSON с обработкой powershell в Azure Runbook. Ниже приведен мой код.

$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

Изpower Я получаю ответ JSOn, как указано выше, я могу прочитать response.content, который содержит {"NormalMktStatus":"open"}, но если я использую response.content.normalMKTstatus, я получаю пустое место.как это решить?А также я хочу выполнить условие if-else с помощью Power Shell, которое

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

1 Ответ

2 голосов
/ 27 сентября 2019

Если вы используете $result =Invoke-WebRequest..., $result.Content содержит JSON строку в вашем случае, которую вам сначала нужно проанализировать в объектах, чтобы иметь возможность доступа к свойствам с точечной нотацией (.normalMktStatus).

Хотя вы можете использовать ConvertFrom-Json для выполнения этого анализа, прощеиспользовать командлет
Invoke-RestMethod , который выполняет разбор JSON за кулисами и напрямую возвращает объект (типа [pscustomobject]), представляющий содержимое JSON
:

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

$obj.NormalMktStatus # -> 'open'

if ($obj.NormalMktStatus -eq 'open') {
  $true
}
else {
  $false 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...