如何在 PowerShell 中創建 JSON 陣列

  1. 使用 ConvertTo-Json 在 PowerShell 中創建 JSON 陣列
  2. 使用 ConvertTo-Json 在 PowerShell 中創建 JSON 陣列並將其保存到文件中
  3. 使用 Here-Strings 在 PowerShell 中創建 JSON 陣列
  4. 創建自定義物件的陣列以在 PowerShell 中創建 JSON 陣列
  5. 結論
如何在 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 中的欄位名稱,例如 FirstNameLastName

然後,我們使用 ConvertTo-Json 將這種結構轉換為 JSON 陣列。

生成的 JSON 輸出如下。

輸出:

[
    {
        "LastName":  "Walker",
        "FirstName":  "Alen"
    }
]

在我們的下一個例子中,我們展示了創建一個包含子陣列的 JSON 物件。

$Body 變數定義為持有一個 JSON 物件,包含兩個屬性:My ItemsMy 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 的陣列,包含使用 @{} 語法定義的自定義物件。我們有 FirstNameLastName 屬性及其各自的值。

然後,使用 ConvertTo-Json cmdlet 將自定義物件的陣列($jsonArray)轉換為 JSON 陣列格式。生成的 JSON 陣列($jsonOutput)現在將每個自定義物件作為元素,其中定義的屬性和值以 JSON 語法表示。

最後,使用 Write-Output 顯示 JSON 陣列。

結論

總之,PowerShell 提供多種創建 JSON 陣列的方法,每種方法針對特定需求和偏好。

ConvertTo-Json cmdlet 是一個多功能的工具,允許輕鬆將 PowerShell 物件或陣列轉換為 JSON 表示。無論是直接構建 JSON,使用 here-strings,還是利用自定義物件,PowerShell 在生成 JSON 陣列方面提供了靈活性,以便於在各種應用程式和系統之間有效地交換和組織數據。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: MD Aminul Islam
MD Aminul Islam avatar MD Aminul Islam avatar

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

相關文章 - PowerShell JSON