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表示,不带额外的空格。
$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。对于复杂对象,您可能需要增加此值。
$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。
$data = @{
Server = "DB01"
Services = @("MySQL", "Redis", "MongoDB")
Status = "Active"
}
$data | ConvertTo-Json -Compress $false
此命令会生成格式正确的JSON输出,带有适当的缩进。输出更容易阅读,但比压缩的JSON占用更多空间。
将进程信息转换为JSON
您可以将ConvertTo-Json与其他cmdlet(如Get-Process)结合使用。这对于以机器可读的格式导出系统信息非常有用。JSON输出可以被其他应用程序使用或存储在文件中。
Get-Process -Name "chrome" |
Select-Object Name, Id, CPU, WorkingSet |
ConvertTo-Json -Depth 2
此命令获取Chrome进程,选择特定属性,然后将其转换为JSON。输出可用于监控或分析目的。
处理特殊字符
ConvertTo-Json会自动转义字符串中的特殊字符。这包括引号、反斜杠和控制字符。无论输入字符串的内容如何,JSON输出都将保持有效。
$text = @{
Message = "This string contains `"quotes`" and \backslashes\"
}
$text | ConvertTo-Json
此cmdlet会在输出的JSON中正确转义引号和反斜杠。这确保了JSON的有效性,并且可以被正确解析。
自定义对象转换
您可以将自定义PowerShell对象转换为JSON。这对于哈希表和PSObjects都有效。转换会保留JSON输出中的对象结构和属性名称。
$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对象。
$event = @{
Name = "Conference"
Date = Get-Date
Location = "New York"
}
$event | ConvertTo-Json
JSON输出中的日期将采用ISO格式。这确保了与使用JSON的其他系统和编程语言的兼容性。
来源
在本文中,我们介绍了PowerShell中的ConvertTo-Json cmdlet。
作者
列出 所有 PowerShell 教程。