如何美化PowerShell/命令提示符响应为无冗余的标准JSON
解决PowerShell/CMD中JSON输出多余转义的问题
一、避免产生多余转义的正确命令
1. Get-ComputerInfo 正确转JSON
Get-ComputerInfo本身输出结构化对象,直接转JSON时需指定足够深度(默认深度为2,嵌套过深的对象会被截断为字符串,引发转义问题):
Get-ComputerInfo | ConvertTo-Json -Depth 10
指定-Depth参数可确保嵌套对象被完整序列化,不会生成不必要的转义字符。
2. systeminfo 转标准JSON
systeminfo是纯文本输出,不能直接通过管道传给ConvertTo-Json(否则PowerShell会把整个文本当作单个字符串转义)。需先将文本解析为结构化对象,再转JSON:
# 解析systeminfo文本为哈希表对象 $systemInfoObj = systeminfo | Select-Object -Skip 1 | ForEach-Object { if ($_ -match '^([^:]+):\s*(.*)$') { [PSCustomObject]@{ Key = $matches[1].Trim() Value = $matches[2].Trim() } } } | Group-Object -AsHashTable -AsString # 生成标准JSON $systemInfoObj | ConvertTo-Json -Depth 5
二、修复已有的带多余转义的JSON字符串
如果已经得到包含大量反斜杠的非标准JSON(本质是JSON字符串被二次转义),可通过“先解析为对象,再重新序列化”修复:
# 假设$badJson是你获取到的有问题的JSON字符串 $cleanObj = $badJson | ConvertFrom-Json $standardJson = $cleanObj | ConvertTo-Json -Depth 10
ConvertFrom-Json会将带转义的字符串解析为原始对象,再用ConvertTo-Json重新生成标准JSON,自动去除多余的反斜杠和转义。
三、常见问题原因
- 直接将纯文本(如systeminfo输出)传给
ConvertTo-Json,导致整个文本被当作单个字符串转义。 - 使用
ConvertTo-Json时未指定足够的-Depth,嵌套对象被截断为字符串,引发后续转义。 - 对已生成的JSON字符串再次执行转JSON操作,导致二次转义(比如将JSON输出又传给另一个
ConvertTo-Json)。
内容的提问来源于stack exchange,提问作者Sufail A
相关产品推荐
相关产品推荐

