如何在 PowerShell 中创建 JSON 数组

  1. 使用 ConvertTo-Json 在 PowerShell 中创建 JSON 数组
  2. 使用 ConvertTo-Json 创建 JSON 数组并将其保存到 PowerShell 中的文件
  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 创建 JSON 数组并将其保存到 PowerShell 中的文件

此方法有点复杂。我们将使用多个变量逐步创建 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