How to parse JSON from the Invoke-WebRequest in PowerShell?

74,648

Solution 1

You could replace Invoke-WebRequest with Invoke-RestMethod which auto-converts json response to a psobject so you can use:

$response = Invoke-RestMethod -Uri "https://yadayada:8080/bla"
$response.flag 

Solution 2

If you have a need to use Invoke-WebRequest over Invoke-RestMethod you can convert it to an object by turning it into a string first

$response = Invoke-WebRequest -Uri "https://yadayada:8080/bla"
$jsonObj = ConvertFrom-Json $([String]::new($response.Content))

Solution 3

This way:

$response = Invoke-WebRequest -Uri <your_uri>
if ($response.statuscode -eq '200') {
    $keyValue= ConvertFrom-Json $response.Content | Select-Object -expand "<your_key_name>"
}
Share:
74,648
user52028778
Author by

user52028778

Updated on July 09, 2022

Comments

  • user52028778
    user52028778 almost 2 years

    When sending the GET request to the server, which uses self-signed certificate:

    add-type @"
        using System.Net;
        using System.Security.Cryptography.X509Certificates;
        public class TrustAllCertsPolicy : ICertificatePolicy {
            public bool CheckValidationResult(
                ServicePoint srvPoint, X509Certificate certificate,
                WebRequest request, int certificateProblem) {
                return true;
            }
        }
    "@
    [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
    $RESPONSE=Invoke-WebRequest -Uri https://yadayada:8080/bla -Method GET
    echo $RESPONSE
    

    I'm getting following Response:

    StatusCode        : 200
    StatusDescription : OK
    Content           : {123, 10, 108, 111...}
    RawContent        : HTTP/1.1 200 OK
                        Content-Length: 21
                        Date: Sat, 11 Jun 2016 10:11:03 GMT
    
                        {
                            flag:false
                        }
    Headers           : {[Content-Length, 21], [Date, Sat, 11 Jun 2016 10:11:03 GMT]}
    RawContentLength  : 21
    

    Content contains some wired numbers, so I went after RawContent, how would I parse the JSON inside, ignoring headers? or is there a clean way to get Content from those numbers?

  • David E
    David E over 4 years
    Heads up in case it helps anyone else - the syntax on line 2 in this answer doesn't work for Powershell v4 - but Invoke-RestMethod did work. Invoke-RestMethod also has a benefit (in Powershell v4 at least) to not have a dependency on IE - to get Invoke-WebRequest to work on an environment without IE available, I had to provide -UseBasicParsing.
  • Gorodeckij Dimitrij
    Gorodeckij Dimitrij over 2 years
    Thanks, that's correct answer for nested json