HOWTO · PowerShell
如何在 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 陣列方面提供了靈活性,以便於在各種應用程式和系統之間有效地交換和組織數據。