如何在 PowerShell 中創建 JSON 陣列
-
使用
ConvertTo-Json
在 PowerShell 中創建 JSON 陣列 -
使用
ConvertTo-Json
在 PowerShell 中創建 JSON 陣列並將其保存到文件中 - 使用 Here-Strings 在 PowerShell 中創建 JSON 陣列
- 創建自定義物件的陣列以在 PowerShell 中創建 JSON 陣列
- 結論

在 PowerShell 中,JSON(JavaScript 物件表示法)是一種常見的資料交換格式,用於不同系統和應用程式之間的通信。包含鍵值對的 JSON 陣列是一種組織資料的結構化方式。
在本文中,我們將探索在 PowerShell 中創建 JSON 陣列的不同方法,並提供詳細的代碼示例和解釋。
使用 ConvertTo-Json
在 PowerShell 中創建 JSON 陣列
在這個例子中,我們展示了如何使用 PowerShell 創建一個簡單的 JSON 陣列。我們首先將 JSON 陣列組織在一個稱為 $Body
的變數中,然後使用 ConvertTo-Json
cmdlet 將其轉換為 JSON 陣列。
示例 1:
$Body = @(
@{
FirstName ='Alen'
LastName ='Walker'
}
)
ConvertTo-Json -InputObject $Body
在此代碼片段中,我們使用 @()
定義了一個陣列,並在陣列內部使用散列表(@{}
)創建了鍵值對,表示我們 JSON 陣列的資料元素。散列表中的鍵對應於我們 JSON 中的欄位名稱,例如 FirstName
和 LastName
。
然後,我們使用 ConvertTo-Json
將這種結構轉換為 JSON 陣列。
生成的 JSON 輸出如下。
輸出:
[
{
"LastName": "Walker",
"FirstName": "Alen"
}
]
在我們的下一個例子中,我們展示了創建一個包含子陣列的 JSON 物件。
$Body
變數定義為持有一個 JSON 物件,包含兩個屬性:My Items
和 My details
。每個屬性包含一個項目的陣列。
示例 2:
$body = @{
'My Items' = @(
"Item 1",
"Item 2",
"Item 3",
"Item 4"
)
'My details' =@(
@{
"Name" = "Alen"
"Id" = "0001"
},
@{
"Name" = "Mycle"
"Id" = "0002"
}
)
}
ConvertTo-Json -InputObject $Body
在這個腳本中,我們定義了一個散列表(@{}
)並指定了兩個鍵:'My Items'
和 'My details'
。與 'My Items'
相關的值是一個項目名稱的陣列,而與 'My details'
相關的值則是一個散列表的陣列,表示有關每個項目的詳細信息。
當我們對 $Body
變數運行 ConvertTo-Json
時,它將結構轉換為 JSON 物件。
生成的 JSON 輸出如下。
輸出:
{
"My details": [
{
"Id": "0001",
"Name": "Alen"
},
{
"Id": "0002",
"Name": "Mycle"
}
],
"My Items": [
"Item 1",
"Item 2",
"Item 3",
"Item 4"
]
}
在這個 JSON 物件中,"My details"
和 "My Items"
是鍵,每個鍵都與其各自的資料陣列相關聯。這種結構允許以層次方式組織相關資料,這是在 PowerShell 中處理 JSON 時的常見用例。
我們也可以創建一個 PowerShell 物件,然後使用 ConvertTo-Json
cmdlet 直接將其轉換為 JSON 陣列。
請參閱以下示例:
$jsonArray = @(
@{
FirstName = 'John'
LastName = 'Doe'
},
@{
FirstName = 'Jane'
LastName = 'Smith'
}
)
$jsonOutput = $jsonArray | ConvertTo-Json
Write-Output $jsonOutput
輸出:
[
{
"LastName": "Doe",
"FirstName": "John"
},
{
"LastName": "Smith",
"FirstName": "Jane"
}
]
這裡,示例腳本開始時定義了一個名為 $jsonArray
的變數,作為 PowerShell 散列表的陣列。每個散列表代表一個人的屬性,包括名字(FirstName
)和姓氏(LastName
)。
然後,腳本使用 ConvertTo-Json
cmdlet 將這個 PowerShell 散列表的陣列轉換為 JSON 陣列,並將其賦值給 $jsonOutput
變數。最後,它使用 Write-Output
顯示生成的 JSON 陣列。
總之,這個腳本使用 PowerShell 散列表創建了兩個具有各自名字和姓氏的個體的 JSON 陣列表示,然後將這個 JSON 陣列輸出到控制台。
使用 ConvertTo-Json
在 PowerShell 中創建 JSON 陣列並將其保存到文件中
這種方法有點複雜。我們將逐步創建 JSON 陣列,使用多個變數。
請查看以下示例以更好地理解這種方法。
示例:
$jsonBase = @{}
$array = @{}
$data = @{"Name" = "Mycle"; "Colour" = "Alen"; }
$array.Add("User", $data)
$jsonBase.Add("UserData", $array)
$jsonBase | ConvertTo-Json -Depth 10 | Out-File ".\sample.json"
在腳本的開始,創建了一個空的散列表,名為 $jsonBase
。這將作為我們將構建的 JSON 物件的基本結構。
其後,初始化了另一個名為 $array
的散列表,以代表陣列物件。這個 $array
變數將保存構成我們 JSON 結構中的陣列的數據。
然後,使用名為 $data
的散列表定義示例用戶數據,其中包含用戶的姓名和顏色等鍵值對。這些數據將稍後被封裝在陣列中。
接下來,腳本將 $data
散列表添加到 $array
散列表中,並將其與鍵 User
相關聯。這確立了用戶特定數據在陣列中的表示。
繼續,現在包含用戶數據的 $array
被添加到 $jsonBase
散列表中,鍵為 UserData
。這一步將用戶數據的陣列封裝在更大的 JSON 結構中。
在結尾時,腳本使用 ConvertTo-Json
將 $jsonBase
散列表轉換為 JSON 格式。請注意,-Depth
參數控制轉換嵌套結構的遞歸層級。
最後,Out-File
cmdlet 將 JSON 數據保存到當前目錄中的名為 sample.json
的文件中。
執行後,將生成一個名為 sample.json
的 JSON 文件,其中包含在鍵 UserData
下的用戶數據,並在鍵 User
下以嵌套結構呈現用戶的姓名和顏色。
輸出(sample.json
):
{
"UserData": {
"User": {
"Name": "Mycle",
"Colour": "Alen"
}
}
}
使用 Here-Strings 在 PowerShell 中創建 JSON 陣列
在 PowerShell 中使用 here-strings 是另外一種方便的技術,用於構建格式良好的 JSON 陣列,同時保持所需的佈局。Here-string 由 @" ... "@
表示,允許我們在 PowerShell 中定義一段文本,同時保留其格式,包括換行和縮排。
我們可以使用 here-strings 直接創建 JSON 陣列作為字符串。
示例:
$jsonArray = @"
[
{
"FirstName": "John",
"LastName": "Doe"
},
{
"FirstName": "Jane",
"LastName": "Smith"
}
]
"@
Write-Output $jsonArray
輸出:
[
{
"FirstName": "John",
"LastName": "Doe"
},
{
"FirstName": "Jane",
"LastName": "Smith"
}
]
在此示例中,我們使用了 here-string(@" ... "@
),這使得可以直接創建 JSON 陣列作為字符串。
在此 here-string 中,我們使用適當的語法定義了 JSON 陣列:
- 我們使用方括號
[...]
將整個陣列包裹起來。 - 然後,我們使用花括號
{...}
將每個單獨的 JSON 物件封閉起來。
最後,我們使用 Write-Output
顯示 JSON 陣列。
這種方法簡化了構建具有所需結構和格式的 JSON 陣列的過程。如我們所見,輸出顯示了一個整齊的 JSON 陣列,符合定義的結構。
創建自定義物件的陣列以在 PowerShell 中創建 JSON 陣列
我們可以用來創建 JSON 陣列的另一種方法是創建自定義物件的陣列,每個物件代表一個元素,然後將其轉換為 JSON 陣列。自定義物件是 [PSCustomObject]
類型的實例,允許我們定義和結構化數據。
[PSCustomObject]
允許我們創建具有自定義屬性的物件。這是 PowerShell 中一個基本功能,有助於在腳本和函數中創建和操作結構化數據。
自定義屬性使用類似散列表的語法來定義,我們指定屬性名稱及其相應的值,例如以下這樣:
[PSCustomObject]@{
Property1 = 'Value1'
Property2 = 'Value2'
}
這是一個示例:
$jsonArray = @(
[PSCustomObject]@{
FirstName = 'John'
LastName = 'Doe'
},
[PSCustomObject]@{
FirstName = 'Jane'
LastName = 'Smith'
}
)
$jsonOutput = $jsonArray | ConvertTo-Json
Write-Output $jsonOutput
輸出:
[
{
"FirstName": "John",
"LastName": "Doe"
},
{
"FirstName": "Jane",
"LastName": "Smith"
}
]
在提供的示例中,創建了一個名為 $jsonArray
的陣列,包含使用 @{}
語法定義的自定義物件。我們有 FirstName
和 LastName
屬性及其各自的值。
然後,使用 ConvertTo-Json
cmdlet 將自定義物件的陣列($jsonArray
)轉換為 JSON 陣列格式。生成的 JSON 陣列($jsonOutput
)現在將每個自定義物件作為元素,其中定義的屬性和值以 JSON 語法表示。
最後,使用 Write-Output
顯示 JSON 陣列。
結論
總之,PowerShell 提供多種創建 JSON 陣列的方法,每種方法針對特定需求和偏好。
ConvertTo-Json
cmdlet 是一個多功能的工具,允許輕鬆將 PowerShell 物件或陣列轉換為 JSON 表示。無論是直接構建 JSON,使用 here-strings,還是利用自定義物件,PowerShell 在生成 JSON 陣列方面提供了靈活性,以便於在各種應用程式和系統之間有效地交換和組織數據。
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn