如何在 PowerShell 中将 JSON 对象写入文件

  1. PowerShell 自定义对象
  2. PowerShell JSON 对象转换为 JSON 字符串
  3. 使用 ConvertTo-JsonOut-File 将 JSON 字符串保存到文件
  4. 使用 ConvertTo-JsonSet-Content 将 JSON 字符串保存到文件
  5. 使用 ConvertTo-JsonAdd-Content 将 JSON 字符串保存到文件
  6. 结论
如何在 PowerShell 中将 JSON 对象写入文件

PowerShell 是一种强大而多功能的脚本语言,提供了强大的工具来管理和处理数据。在处理 JSON(JavaScript 对象表示法)数据时,PowerShell 提供了有效的方式将自定义对象转换为 JSON 字符串,并随后将其写入文件。

在本文中,我们将深入探讨将 PowerShell 对象转换为 JSON 字符串并使用各种 cmdlet(如 ConvertTo-JsonOut-FileSet-ContentAdd-Content)将其保存到文件的过程。

PowerShell 自定义对象

PSCustomObject 是 PowerShell 中定义自定义对象的基本元素。自定义对象通常包含属性及其关联的值,提供了一种结构化的方式来组织数据。

除了从头创建自定义对象外,PowerShell 在高效处理和处理 JSON 对象方面也很熟练。

创建 JSON 自定义对象

让我们开始检查如何使用示例 JSON 结构创建 JSON 自定义对象。我们会将这个 JSON 结构存储在 $MyJsonVar 变量中。

$MyJsonVar = @"
 {
   "ExampleJson":{
     "Fruit1":{
       "Name":"Apple",
       "Price":"`$10.00"
     }
  }
 }
"@

输出:

PowerShell 自定义对象 1

在这个示例中,我们定义了一个表示水果信息的 JSON 结构。

将 JSON 转换为 PowerShell 自定义对象

要将 JSON 表示转换为 PowerShell 自定义对象,我们使用 ConvertFrom-JSON cmdlet。让我们将新创建的 JSON 对象分配给 $MyJsonObject 变量。

$MyJsonObject = $MyJsonVar | ConvertFrom-Json

ConvertFrom-JSON cmdlet 将 JSON 结构转换为适当的 PSCustomObject

显示创建的 PowerShell 自定义对象

现在,让我们显示新创建的 PSCustomObject,它与原始 JSON 结构相对应。

$MyJsonObject

输出:

PowerShell 自定义对象 3

这些命令访问并显示了自定义对象中定义的水果的价格和名称属性。因此,已确认我们得到了一个适当的 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 字符串中转义特殊字符,提供 DefaultEscapeNonAsciiEscapeHtmlDoNotEscape 等选项。

为了演示 ConvertTo-Json cmdlet 的使用,我们考虑上一节中的自定义对象($MyJsonObject):

我们可以很容易地将自定义对象传递给 ConvertTo-Json cmdlet。我们可以通过管道(|)将 $MyJsonObject 发送进去,将自定义对象转换为 JSON 字符串。

$MyJsonObject | ConvertTo-Json

输出:

将 JSON 对象转换为 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-JsonOut-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"

输出:

将 JSON 字符串保存到文件

在这个例子中,$MyJsonObject 代表包含使用 ConvertTo-Json 生成的 JSON 字符串的变量。管道(|)随后将这个 JSON 字符串传递给 Out-File 以写入文件。

-FilePath 参数指定 JSON 字符串的目标路径。只需将"D:\path\to\example.json"替换为您打算保存 JSON 内容的所需文件路径即可。

通过这种方式使用 Out-File,您可以有效地将 JSON 数据持久化到文件中,使其可供将来使用或共享。这个简单而强大的技巧在有效管理 PowerShell 环境中的 JSON 数据上发挥着重要作用。

使用 ConvertTo-JsonSet-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-JsonAdd-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-FileSet-ContentAdd-Content)将其保存到文件中的过程。

通过利用这些工具,用户可以高效地处理 JSON 数据,允许简化的数据管理、共享以及与多种应用和系统的集成。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

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.

相关文章 - PowerShell JSON