如何在 PowerShell 中创建 JSON 数组
-
使用
ConvertTo-Json
在 PowerShell 中创建 JSON 数组 -
使用
ConvertTo-Json
创建 JSON 数组并将其保存到 PowerShell 中的文件 - 使用 Here-Strings 在 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
创建 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
的数组,包含使用 @{}
语法定义的自定义对象。我们有属性 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 数组以实现高效数据交换和组织方面提供了灵活性。
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