如何在 PowerShell 中將 JSON 物件寫入檔案
- PowerShell 自定義對象
- PowerShell JSON 對象轉換為 JSON 字符串
-
使用
ConvertTo-Json
和Out-File
將 JSON 字符串保存到文件 -
使用
ConvertTo-Json
和Set-Content
將 JSON 字符串保存到文件 -
使用
ConvertTo-Json
和Add-Content
將 JSON 字符串保存到文件 - 結論

PowerShell,一種強大且多功能的腳本語言,提供了強大的工具來管理和操縱數據。當涉及處理 JSON(JavaScript 物件表示法)數據時,PowerShell 提供有效的方法來將自定義對象轉換為 JSON 字符串,隨後將其寫入文件中。
在本文中,我們將深入探討將 PowerShell 對象轉換為 JSON 字符串並使用各種 cmdlet(如 ConvertTo-Json
、Out-File
、Set-Content
和 Add-Content
)將其保存到文件的過程。
PowerShell 自定義對象
PSCustomObject
是 PowerShell 中的基本元素,用於定義自定義對象。自定義對象通常包含屬性及其相關值,提供了一種組織數據的結構化方式。
除了從頭創建自定義對象,PowerShell 在有效處理和處理 JSON 對象方面也非常熟練。
創建 JSON 自定義對象
讓我們從一個例子 JSON 結構開始,來檢查如何創建 JSON 自定義對象。我們將這個 JSON 結構存儲在 $MyJsonVar
變量中。
$MyJsonVar = @"
{
"ExampleJson":{
"Fruit1":{
"Name":"Apple",
"Price":"`$10.00"
}
}
}
"@
輸出:
在這個例子中,我們定義了一個表示水果信息的 JSON 結構。
將 JSON 轉換為 PowerShell 自定義對象
要將 JSON 表示轉換為 PowerShell 自定義對象,我們使用 ConvertFrom-JSON
cmdlet。讓我們將新創建的 JSON 對象指派給 $MyJsonObject
變量。
$MyJsonObject = $MyJsonVar | ConvertFrom-Json
ConvertFrom-JSON
cmdlet 將 JSON 結構轉化為正確的 PSCustomObject
。
顯示創建的 PowerShell 自定義對象
現在,讓我們顯示新創建的 PSCustomObject
,它對應於原始 JSON 結構。
$MyJsonObject
輸出:
這些命令訪問並顯示自定義對象中定義的水果的價格和名稱屬性。所以,可以確認我們得到了名為 $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 字符串中轉義特殊字符,提供Default
、EscapeNonAscii
、EscapeHtml
和DoNotEscape
等選項。
為了演示 ConvertTo-Json
cmdlet 的使用,我們考慮上一部分的自定義對象($MyJsonObject
):
我們可以輕鬆地將自定義對象傳輸到 ConvertTo-Json
cmdlet。我們可以通過管道(|
)將 $MyJsonObject
傳遞以將自定義對象轉換為 JSON 字符串。
$MyJsonObject | ConvertTo-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-Json
和 Out-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"
輸出:
在這個例子中,$MyJsonObject
代表使用 ConvertTo-Json
生成的包含 JSON 字符串的變量。管道(|
)然後將這個 JSON 字符串傳遞給 Out-File
以寫入文件。
-FilePath
參數指定 JSON 字符串的目標路徑。只需將"D:\path\to\example.json"
替換為您打算保存 JSON 內容的所需文件路徑。
通過以這種方式使用 Out-File
,您有效地將 JSON 數據持久化到文件中,使其可以在未來使用或共享。這個簡單但強大的技術對於在 PowerShell 環境中有效管理 JSON 數據非常重要。
使用 ConvertTo-Json
和 Set-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-Json
和 Add-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-File
、Set-Content
和 Add-Content
)將其保存到文件中。
通過利用這些工具,用戶可以有效地處理 JSON 數據,實現數據管理、共享和與各種應用程序和系統的整合。
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.