使用 PowerShell 解析 JSON 檔案

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 在 PowerShell 中下載 JSON 檔案
  2. 在 PowerShell 中使用 Invoke-Request 命令
  3. 使用 Invoke-RestMethod Cmdlet
  4. 使用 PowerShell 解析 JSON 檔案
  5. 在 PowerShell 中使用 Invoke-WebRequest 下載過濾後的物件
使用 PowerShell 解析 JSON 檔案

許多 API 使用稱為 REST 的協議。REST APIs 主要通過 Javascript 物件表示法或簡單的 JSON 以一種語言進行交談。

本文展示瞭如何使用 Windows PowerShell 直接與 REST API 對話並將資料轉換為有用的東西。

JSON 是一種縮小人類可讀資料和機器可讀資料之間差距的方法。

在結構化資料物件之前,大多數作業系統依賴於文字解析工具,這些工具使用複雜的正規表示式 regex 來為簡單文字帶來結構。

我們現在可以使用 JSON 建立一個人類和程式都可以相對輕鬆地讀取的字串。

{
    "string": "this is a string. backslashes (\\) have to be escaped",
    "object": {
        "description": "This is a sample object nested inside our javascript object. Description is a string subproperty"
    },
    "numbers": 12345,
    "array": ["a string", "another string"]
}

JSON 易於讀寫,儘管有許多引號、逗號、括號和轉義字元。

在 PowerShell 中下載 JSON 檔案

首先,從 GitHub 獲取一個使用 Invoke-RestMethod 命令的示例 JSON 到 PowerShell。

但是,瞭解如何轉換 JSON 字串仍然很重要。

在 PowerShell 中使用 Invoke-Request 命令

要使用 Windows PowerShell 查詢 API 並獲取一些 JSON 作為回報,請使用 Invoke-WebRequest 命令。

此命令可以通過 HTTP 查詢任何 Web 服務或站點並返回資訊(不僅僅是 JSON)。我們將使用這個示例來獲取一些可以使用的 JSON。

  • 開啟 PowerShell 控制檯。
  • 執行 Invoke-WebRequest 命令查詢 GitHub API,如下圖所示。下面的程式碼片段將 cmdlet 返回的所有輸出分配給 $webData 變數進行處理。
$webJSONData = Invoke-WebRequest -Uri "https://api.github.com/repos/PowerShell/PowerShell/releases/latest"

執行 ConvertFrom-Json 命令將儲存在 content 屬性中的 JSON 字串轉換為 PowerShell 物件。

$releases = ConvertFrom-Json $webJSONData.content

通過管道將 Windows PowerShell 物件傳遞給 Get-Member 命令。當你這樣做時,我們將看到該物件是 System.Management.Automation.PSCustomObject 型別;不僅僅是一個簡單的字串。

$releases | Get-Member

使用 Invoke-RestMethod Cmdlet

使用 Invoke-RestMethod 命令與 Invoke-WebRequest 非常相似。它只消除了一行程式碼。

該 cmdlet 將自動假定一個 JSON 響應併為你轉換它。

它在程式碼中闡明瞭你期望使用 API,並且你還期望 JSON 響應。

  • 開啟你的 PowerShell 控制檯
  • 執行 Invoke-RestMethod 獲取釋出資訊
$releases_2 = Invoke-RestMethod -Uri "https://api.github.com/repos/PowerShell/PowerShell/releases/latest"

通過管道將 Windows PowerShell 物件傳遞給 Get-Member 命令。當你這樣做時,我們將看到該物件是 System.Management.Automation.PSCustomObject 型別;不僅僅是一個簡單的字串。

$releases_2 | Get-Member

使用 PowerShell 解析 JSON 檔案

讓我們看一下上一節中定義的 $releases 變數。兩個突出的屬性是 browser_download_urlname 屬性。

browser_download_url 屬性與 URL 相關,而 name 屬性可能與版本名稱相關。

現在輸出所有的 name 屬性,如下所示。

$releases_2.assets.name 

在 PowerShell 中使用 Invoke-WebRequest 下載過濾後的物件

## Using Invoke-RestMethod
$webAPIData = Invoke-RestMethod -Uri "https://api.github.com/repos/PowerShell/PowerShell/releases/latest"

## Using Invoke-WebRequest
$webAPIData = ConvertFrom-JSON (Invoke-WebRequest -uri "https://api.github.com/repos/PowerShell/PowerShell/releases/latest")

## The download information is stored in the "assets" section of the data
$assets = $webAPIData.assets

## The pipeline operator is used to filter the assets object to find the release version
$asset = $assets | where-object { $_.name -match "win-x64" -and $_.name -match ".zip"}

## Download the latest version
Write-output "Downloading $($asset.name)"
Invoke-WebRequest $asset.browser_download_url -OutFile "$pwd\$($asset.name)"
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相關文章 - PowerShell JSON