如何在 PowerShell 中將 JSON 物件寫入檔案

  1. PowerShell 自定義對象
  2. PowerShell JSON 對象轉換為 JSON 字符串
  3. 使用 ConvertTo-JsonOut-File 將 JSON 字符串保存到文件
  4. 使用 ConvertTo-JsonSet-Content 將 JSON 字符串保存到文件
  5. 使用 ConvertTo-JsonAdd-Content 將 JSON 字符串保存到文件
  6. 結論
如何在 PowerShell 中將 JSON 物件寫入檔案

PowerShell,一種強大且多功能的腳本語言,提供了強大的工具來管理和操縱數據。當涉及處理 JSON(JavaScript 物件表示法)數據時,PowerShell 提供有效的方法來將自定義對象轉換為 JSON 字符串,隨後將其寫入文件中。

在本文中,我們將深入探討將 PowerShell 對象轉換為 JSON 字符串並使用各種 cmdlet(如 ConvertTo-JsonOut-FileSet-ContentAdd-Content)將其保存到文件的過程。

PowerShell 自定義對象

PSCustomObject 是 PowerShell 中的基本元素,用於定義自定義對象。自定義對象通常包含屬性及其相關值,提供了一種組織數據的結構化方式。

除了從頭創建自定義對象,PowerShell 在有效處理和處理 JSON 對象方面也非常熟練。

創建 JSON 自定義對象

讓我們從一個例子 JSON 結構開始,來檢查如何創建 JSON 自定義對象。我們將這個 JSON 結構存儲在 $MyJsonVar 變量中。

$MyJsonVar = @"
 {
   "ExampleJson":{
     "Fruit1":{
       "Name":"Apple",
       "Price":"`$10.00"
     }
  }
 }
"@

輸出:

PowerShell 自訂物件 1

在這個例子中,我們定義了一個表示水果信息的 JSON 結構。

將 JSON 轉換為 PowerShell 自定義對象

要將 JSON 表示轉換為 PowerShell 自定義對象,我們使用 ConvertFrom-JSON cmdlet。讓我們將新創建的 JSON 對象指派給 $MyJsonObject 變量。

$MyJsonObject = $MyJsonVar | ConvertFrom-Json

ConvertFrom-JSON cmdlet 將 JSON 結構轉化為正確的 PSCustomObject

顯示創建的 PowerShell 自定義對象

現在,讓我們顯示新創建的 PSCustomObject,它對應於原始 JSON 結構。

$MyJsonObject

輸出:

PowerShell 自訂物件 3

這些命令訪問並顯示自定義對象中定義的水果的價格和名稱屬性。所以,可以確認我們得到了名為 $MyJsonObject 的正確 PowerShell 自定義對象。

PowerShell JSON 對象轉換為 JSON 字符串

PowerShell 提供了 ConvertTo-Json cmdlet,這是一個有價值的工具,用於將現有自定義對象轉換為 JSON 字符串。這一過程有效地將對象轉換為 JSON 格式的純文本表示,可以根據需要進一步使用或存儲。

ConvertTo-Json cmdlet 的語法:

ConvertTo-Json
[-InputObject] <Object>
[-Depth <Int32>]
[-Compress]
[-EnumsAsStrings]
[-AsArray]
[-EscapeHandling <StringEscapeHandling>]
[<CommonParameters>]

ConvertTo-Json cmdlet 提供了幾個可選參數來自定義 JSON 轉換過程。以下是這些參數的詳細信息:

  • -InputObject:這個參數是基本的,因為它指定了需要轉換為 JSON 字符串的自定義對象。您可以直接將對象傳遞給這個參數。

  • -Depth:這個關鍵參數使您能夠指定結果 JSON 字符串中的層級數。深度表示要包含在 JSON 字符串中的嵌套對象或數組的層級數。

    然而,必須謹慎使用,因為不當使用可能導致數據丟失。默認值設置為 2。

  • -Compress:此參數通過去除不必要的空白和縮進來壓縮輸出 JSON,從而產生更緊湊的 JSON 字符串。

  • -EnumsAsStrings:使用此參數時,將在 JSON 輸出中表示枚舉值為字符串,以確保與可能不妥善處理數字枚舉的系統的兼容性。

  • -AsArray:當指定時,此參數格式化輸出為 JSON 數組,即使輸入對象不是數組。

  • -EscapeHandling:此參數允許自定義如何在 JSON 字符串中轉義特殊字符,提供 DefaultEscapeNonAsciiEscapeHtmlDoNotEscape 等選項。

為了演示 ConvertTo-Json cmdlet 的使用,我們考慮上一部分的自定義對象($MyJsonObject):

我們可以輕鬆地將自定義對象傳輸到 ConvertTo-Json cmdlet。我們可以通過管道(|)將 $MyJsonObject 傳遞以將自定義對象轉換為 JSON 字符串。

$MyJsonObject | ConvertTo-Json

輸出:

JSON 對象轉換為 JSON 字串

讓我們進一步演示 ConvertTo-Json cmdlet 的使用。讓我們考慮一個名為 $AnotherJsonObject 的自定義對象:

$AnotherJsonObject = @{
    Name     = "John Doe"
    Age      = 30
    IsActive = $true
    Hobbies  = @("Reading", "Gardening")
    Address  = @{
        Street  = "1234 Elm St"
        City    = "Anytown"
        Country = "USA"
    }
}

要將這個對象轉換為 JSON 字符串並顯示輸出,請使用以下命令:

$AnotherJsonObject | ConvertTo-Json

這一轉換的輸出是一個說明性的 JSON 字符串,表示原始自定義對象。

{
    "Name": "John Doe",
    "Age": 30,
    "IsActive": true,
    "Hobbies": [
        "Reading",
        "Gardening"
    ],
    "Address": {
        "Street": "1234 Elm St",
        "City": "Anytown",
        "Country": "USA"
    }
}

如我們所見,輸出顯示了一個結構化對象($AnotherJsonObject),表示個人信息,如姓名、年齡、活動狀態、愛好和地址詳細信息。

使用 ConvertTo-JsonOut-File 將 JSON 字符串保存到文件

一旦您通過 PowerShell 中的 ConvertTo-Json cmdlet 獲得了 JSON 字符串,下一步就是將其保存到文件中以供以後使用或共享。幸運的是,PowerShell 提供了幾種方法來實現這一點,其中最簡單的方法之一是使用 Out-File

Out-File cmdlet 是一個可靠的工具,用於將 JSON 字符串保存到文件中。以下是一個示例,說明如何實現這一點:

$MyJsonObject | ConvertTo-Json | Out-File -FilePath "D:\path\to\example.json"

輸出:

將 JSON 字串保存到文件中

在這個例子中,$MyJsonObject 代表使用 ConvertTo-Json 生成的包含 JSON 字符串的變量。管道(|)然後將這個 JSON 字符串傳遞給 Out-File 以寫入文件。

-FilePath 參數指定 JSON 字符串的目標路徑。只需將"D:\path\to\example.json"替換為您打算保存 JSON 內容的所需文件路徑。

通過以這種方式使用 Out-File,您有效地將 JSON 數據持久化到文件中,使其可以在未來使用或共享。這個簡單但強大的技術對於在 PowerShell 環境中有效管理 JSON 數據非常重要。

使用 ConvertTo-JsonSet-Content 將 JSON 字符串保存到文件

另一種將 JSON 字符串保存到文件的方法是使用 Set-Content cmdlet。Set-Content cmdlet 提供了一種簡單的方法來將數據寫入文件,這使其成為將 JSON 字符串保存到磁碟的合適選擇。

以下示例演示了這個過程:

$MyJsonObject | ConvertTo-Json | Set-Content -Path "D:\path\to\example.json"

在這個例子中,$MyJsonObject 是包含使用 ConvertTo-Json 生成的 JSON 字符串的變量。管道(|)將這個 JSON 字符串傳遞給 Set-Content 以寫入文件。

-Path 參數指定 JSON 字符串的目標路徑。只需將"D:\path\to\example.json"替換為您打算保存 JSON 內容的所需文件路徑。

使用 ConvertTo-JsonAdd-Content 將 JSON 字符串保存到文件

我們還可以使用 Add-Content cmdlet 將 JSON 字符串保存到 PowerShell 中的文件,該命令允許將 JSON 字符串附加到現有文件。以下示例展示了如何實現這一點:

$MyJsonObject | ConvertTo-Json | Add-Content -Path "D:\path\to\example.json"

在這個例子中,$MyJsonObject 代表使用 ConvertTo-Json 生成的包含 JSON 字符串的變量。管道(|)將這個 JSON 字符串傳遞給 Add-Content 以附加到由 -Path 參數指定的文件。

-Path 參數表示將附加 JSON 字符串的文件。只需將"D:\path\to\example.json"替換為您打算附加 JSON 內容的所需文件路徑。

Add-Content cmdlet 提供了一種方便的方法,可以將內容添加或附加到文件中,並不會覆蓋現有數據。當處理需要隨時間更新或擴展的 JSON 字符串時,這特別有用。

結論

本文演示了如何將 PowerShell 對象轉換為 JSON 字符串,以及如何使用 ConvertTo-Json cmdlet 和其他文件處理 cmdlet(如 Out-FileSet-ContentAdd-Content)將其保存到文件中。

通過利用這些工具,用戶可以有效地處理 JSON 數據,實現數據管理、共享和與各種應用程序和系統的整合。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

相關文章 - PowerShell JSON