ZetCode

PowerShell ConvertTo-Json

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍PowerShell中的ConvertTo-Json cmdlet。此cmdlet将对象转换为JSON格式的字符串。JSON广泛用于系统和应用程序之间的数据交换。

JSON基础

JSON(JavaScript对象表示法)是一种轻量级的数据交换格式。它易于人类阅读和编写,也易于机器解析和生成。JSON将数据表示为键值对和有序的值列表。PowerShell可以使用ConvertTo-Json和ConvertFrom-Json处理JSON数据。

ConvertTo-Json基本用法

使用ConvertTo-Json的最简单方法是处理基本对象。此cmdlet将PowerShell对象转换为JSON字符串。默认情况下,它会创建紧凑的JSON表示,不带额外的空格。

json1.ps1
$person = @{
    Name = "John Doe"
    Age = 35
    Occupation = "Developer"
}
$person | ConvertTo-Json

此命令创建一个哈希表并将其转换为JSON。输出是一个包含对象JSON表示形式的字符串。

PS C:\> .\json1.ps1
{
    "Name":  "John Doe",
    "Age":  35,
    "Occupation":  "Developer"
}

格式化JSON输出

您可以使用-Depth参数控制JSON输出的格式。它指定JSON中包含多少层级的嵌套对象。默认深度为2。对于复杂对象,您可能需要增加此值。

json2.ps1
$company = @{
    Name = "TechCorp"
    Employees = @(
        @{Name="Alice"; Position="Manager"},
        @{Name="Bob"; Position="Developer"}
    )
}
$company | ConvertTo-Json -Depth 3

此示例显示了需要深度为3的嵌套对象。如果深度不足,某些数据在JSON输出中可能会被截断。

美化JSON输出

为了提高可读性,您可以将-Compress参数设置为$false来美化JSON输出。这将为输出添加缩进和换行符。默认值为$true,会生成紧凑的JSON。

json3.ps1
$data = @{
    Server = "DB01"
    Services = @("MySQL", "Redis", "MongoDB")
    Status = "Active"
}
$data | ConvertTo-Json -Compress $false

此命令会生成格式正确的JSON输出,带有适当的缩进。输出更容易阅读,但比压缩的JSON占用更多空间。

将进程信息转换为JSON

您可以将ConvertTo-Json与其他cmdlet(如Get-Process)结合使用。这对于以机器可读的格式导出系统信息非常有用。JSON输出可以被其他应用程序使用或存储在文件中。

json4.ps1
Get-Process -Name "chrome" | 
    Select-Object Name, Id, CPU, WorkingSet | 
    ConvertTo-Json -Depth 2

此命令获取Chrome进程,选择特定属性,然后将其转换为JSON。输出可用于监控或分析目的。

处理特殊字符

ConvertTo-Json会自动转义字符串中的特殊字符。这包括引号、反斜杠和控制字符。无论输入字符串的内容如何,JSON输出都将保持有效。

json5.ps1
$text = @{
    Message = "This string contains `"quotes`" and \backslashes\"
}
$text | ConvertTo-Json

此cmdlet会在输出的JSON中正确转义引号和反斜杠。这确保了JSON的有效性,并且可以被正确解析。

自定义对象转换

您可以将自定义PowerShell对象转换为JSON。这对于哈希表和PSObjects都有效。转换会保留JSON输出中的对象结构和属性名称。

json6.ps1
$car = [PSCustomObject]@{
    Make = "Toyota"
    Model = "Camry"
    Year = 2022
    Features = @("GPS", "Bluetooth", "Backup Camera")
}
$car | ConvertTo-Json -Depth 2

此示例创建了一个自定义对象并将其转换为JSON。功能数组在JSON输出中得到了正确表示。

在JSON中使用日期

日期对象默认会转换为ISO 8601格式的JSON字符串。这是一种被广泛支持的标准日期表示法。您可以在需要时将这些字符串解析回DateTime对象。

json7.ps1
$event = @{
    Name = "Conference"
    Date = Get-Date
    Location = "New York"
}
$event | ConvertTo-Json

JSON输出中的日期将采用ISO格式。这确保了与使用JSON的其他系统和编程语言的兼容性。

来源

PowerShell 文档

在本文中,我们介绍了PowerShell中的ConvertTo-Json cmdlet。

作者

我的名字是Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从2007年开始撰写编程文章。迄今为止,我已撰写了1400多篇文章和8本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PowerShell 教程