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