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 中的字段名,例如 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 数组以实现高效数据交换和组织方面提供了灵活性。