如何在 PowerShell 中将 JSON 对象写入文件
- PowerShell 自定义对象
- PowerShell JSON 对象转换为 JSON 字符串
-
使用
ConvertTo-Json
和Out-File
将 JSON 字符串保存到文件 -
使用
ConvertTo-Json
和Set-Content
将 JSON 字符串保存到文件 -
使用
ConvertTo-Json
和Add-Content
将 JSON 字符串保存到文件 - 结论

PowerShell 是一种强大而多功能的脚本语言,提供了强大的工具来管理和处理数据。在处理 JSON(JavaScript 对象表示法)数据时,PowerShell 提供了有效的方式将自定义对象转换为 JSON 字符串,并随后将其写入文件。
在本文中,我们将深入探讨将 PowerShell 对象转换为 JSON 字符串并使用各种 cmdlet(如 ConvertTo-Json
、Out-File
、Set-Content
和 Add-Content
)将其保存到文件的过程。
PowerShell 自定义对象
PSCustomObject
是 PowerShell 中定义自定义对象的基本元素。自定义对象通常包含属性及其关联的值,提供了一种结构化的方式来组织数据。
除了从头创建自定义对象外,PowerShell 在高效处理和处理 JSON 对象方面也很熟练。
创建 JSON 自定义对象
让我们开始检查如何使用示例 JSON 结构创建 JSON 自定义对象。我们会将这个 JSON 结构存储在 $MyJsonVar
变量中。
$MyJsonVar = @"
{
"ExampleJson":{
"Fruit1":{
"Name":"Apple",
"Price":"`$10.00"
}
}
}
"@
输出:
在这个示例中,我们定义了一个表示水果信息的 JSON 结构。
将 JSON 转换为 PowerShell 自定义对象
要将 JSON 表示转换为 PowerShell 自定义对象,我们使用 ConvertFrom-JSON
cmdlet。让我们将新创建的 JSON 对象分配给 $MyJsonObject
变量。
$MyJsonObject = $MyJsonVar | ConvertFrom-Json
ConvertFrom-JSON
cmdlet 将 JSON 结构转换为适当的 PSCustomObject
。
显示创建的 PowerShell 自定义对象
现在,让我们显示新创建的 PSCustomObject
,它与原始 JSON 结构相对应。
$MyJsonObject
输出:
这些命令访问并显示了自定义对象中定义的水果的价格和名称属性。因此,已确认我们得到了一个适当的 PowerShell 自定义对象 $MyJsonObject
。
PowerShell JSON 对象转换为 JSON 字符串
PowerShell 提供了 ConvertTo-Json
cmdlet,这是一个有价值的工具,可以将现有自定义对象转换为 JSON 字符串。这个过程有效地将对象转换为 JSON 格式的纯文本表示,可以根据需要进一步使用或存储。
ConvertTo-Json
cmdlet 的语法:
ConvertTo-Json
[-InputObject] <Object>
[-Depth <Int32>]
[-Compress]
[-EnumsAsStrings]
[-AsArray]
[-EscapeHandling <StringEscapeHandling>]
[<CommonParameters>]
ConvertTo-Json
cmdlet 提供了多个可选参数来自定义 JSON 转换过程。以下是这些参数的简要说明:
-
-InputObject
:该参数是基本的,因为它指定了需要转换为 JSON 字符串的自定义对象。您可以直接将对象传递给此参数。 -
-Depth
:该重要参数使您能够指定生成的 JSON 字符串中的层级数。深度表示将包含多少级嵌套对象或数组。但必须谨慎使用,因为不当使用可能导致数据丢失。默认值设置为 2。
-
-Compress
:该参数通过去除不必要的空格和缩进来压缩输出 JSON,从而生成一个更紧凑的 JSON 字符串。 -
-EnumsAsStrings
:使用时,该参数在 JSON 输出中将枚举值表示为字符串,以确保与可能无法很好处理数字枚举的系统的兼容性。
-
-AsArray
:当指定时,该参数将输出格式化为 JSON 数组,即使输入对象不是数组。 -
-EscapeHandling
:该参数允许自定义如何在 JSON 字符串中转义特殊字符,提供Default
、EscapeNonAscii
、EscapeHtml
和DoNotEscape
等选项。
为了演示 ConvertTo-Json
cmdlet 的使用,我们考虑上一节中的自定义对象($MyJsonObject
):
我们可以很容易地将自定义对象传递给 ConvertTo-Json
cmdlet。我们可以通过管道(|
)将 $MyJsonObject
发送进去,将自定义对象转换为 JSON 字符串。
$MyJsonObject | ConvertTo-Json
输出:
让我们进一步演示 ConvertTo-Json
cmdlet 的用法。我们考虑一个名为 $AnotherJsonObject
的自定义对象:
$AnotherJsonObject = @{
Name = "John Doe"
Age = 30
IsActive = $true
Hobbies = @("Reading", "Gardening")
Address = @{
Street = "1234 Elm St"
City = "Anytown"
Country = "USA"
}
}
要将此对象转换为 JSON 字符串并显示输出,请使用以下命令:
$AnotherJsonObject | ConvertTo-Json
此转换的输出是一个示例 JSON 字符串,表示原始自定义对象。
{
"Name": "John Doe",
"Age": 30,
"IsActive": true,
"Hobbies": [
"Reading",
"Gardening"
],
"Address": {
"Street": "1234 Elm St",
"City": "Anytown",
"Country": "USA"
}
}
正如我们所看到的,输出显示了一个结构化的对象($AnotherJsonObject
),表示一个人的个人信息,如姓名、年龄、活动状态、爱好和地址信息。
使用 ConvertTo-Json
和 Out-File
将 JSON 字符串保存到文件
一旦您使用 PowerShell 中的 ConvertTo-Json
cmdlet 获得了 JSON 字符串,下一个逻辑步骤就是将其保存到文件中,以便日后使用或共享。幸运的是,PowerShell 提供了几种方法来实现这一点,其中最直接的方法之一是使用 Out-File
。
Out-File
cmdlet 是一个可靠的工具,用于将 JSON 字符串保存到文件。以下是说明如何实现这一目标的示例:
$MyJsonObject | ConvertTo-Json | Out-File -FilePath "D:\path\to\example.json"
输出:
在这个例子中,$MyJsonObject
代表包含使用 ConvertTo-Json
生成的 JSON 字符串的变量。管道(|
)随后将这个 JSON 字符串传递给 Out-File
以写入文件。
-FilePath
参数指定 JSON 字符串的目标路径。只需将"D:\path\to\example.json"
替换为您打算保存 JSON 内容的所需文件路径即可。
通过这种方式使用 Out-File
,您可以有效地将 JSON 数据持久化到文件中,使其可供将来使用或共享。这个简单而强大的技巧在有效管理 PowerShell 环境中的 JSON 数据上发挥着重要作用。
使用 ConvertTo-Json
和 Set-Content
将 JSON 字符串保存到文件
另一种将 JSON 字符串保存到文件的方法是使用 Set-Content
cmdlet。Set-Content
cmdlet 提供了一种直接写入数据到文件的方法,适合用于将 JSON 字符串保存到磁盘。
以下示例演示了这个过程:
$MyJsonObject | ConvertTo-Json | Set-Content -Path "D:\path\to\example.json"
在这个例子中,$MyJsonObject
是包含使用 ConvertTo-Json
生成的 JSON 字符串的变量。管道(|
)将这个 JSON 字符串传递给 Set-Content
以写入文件。
-Path
参数指定 JSON 字符串的目标路径。只需将"D:\path\to\example.json"
替换为您打算保存 JSON 内容的所需文件路径即可。
使用 ConvertTo-Json
和 Add-Content
将 JSON 字符串保存到文件
我们在 PowerShell 中保存 JSON 字符串到文件的另一种方法是使用 Add-Content
cmdlet,它允许将 JSON 字符串附加到现有文件。以下示例演示如何实现这一点:
$MyJsonObject | ConvertTo-Json | Add-Content -Path "D:\path\to\example.json"
在这个例子中,$MyJsonObject
代表包含使用 ConvertTo-Json
生成的 JSON 字符串的变量。管道(|
)将这个 JSON 字符串传递给 Add-Content
以追加到 -Path
参数指定的文件。
-Path
参数表示将要附加 JSON 字符串的文件。只需将"D:\path\to\example.json"
替换为您打算附加 JSON 内容的所需文件路径即可。
Add-Content
cmdlet 提供了一种便利的方式,可以将内容添加到文件而不覆盖现有数据。当处理需要随着时间的推移进行更新或扩展的 JSON 字符串时,这一点尤其有用。
结论
本文演示了将 PowerShell 对象转换为 JSON 字符串并使用 ConvertTo-Json
cmdlet 以及其他文件处理 cmdlet(如 Out-File
、Set-Content
和 Add-Content
)将其保存到文件中的过程。
通过利用这些工具,用户可以高效地处理 JSON 数据,允许简化的数据管理、共享以及与多种应用和系统的集成。
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.