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 创建 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 数组以实现高效数据交换和组织方面提供了灵活性。