PowerShell中用ConvertTo-Json配合-Depth参数可深度展开嵌套对象,默认深度2会截断三层以上结构,需设-Density 5/10/100等值;结合Select-Object筛选、-ExpandProperty展开数组、UTF8编码输出及ConvertFrom-Json还原对象。
powershell 中将带层级结构的对象深度展开并输出,核心是用 convertto-json 并配合 -depth 参数控制嵌套展开程度。默认只展到第 2 层,深层属性会被省略为 "..." 或直接丢弃,必须显式指定足够大的深度值才能完整呈现。
用 ConvertTo-Json 指定足够深度
PowerShell 默认的 ConvertTo-Json 深度为 2,遇到三层及以上嵌套(如对象里包含数组、再含对象、再含属性)就会截断。要完整展开,需手动设 -Depth 值:
- 简单嵌套(如进程的 Modules、Threads 等子对象):
-Depth 5通常够用 - 复杂配置或自定义嵌套对象(如从 JSON 文件读入再加工):建议从
-Depth 10起试,逐步增加直到无省略 - 不确定最大深度时,可设一个较大值如
-Depth 100—— 它不会报错,只会按实际结构输出
结合管道与对象筛选再展开
不是所有属性都需要完整展开。可先用 Select-Object 提取关键字段,减少冗余,再转 JSON:
Get-Process | Select-Object Name, Id, @{n='Modules';e={$_.Modules}} | ConvertTo-Json -Depth 5- 对数组类属性(如
$_.NetworkAdapters),可用-ExpandProperty提前展开一层:Select-Object -ExpandProperty NetworkAdapters,再接ConvertTo-Json
处理中文、特殊字符与文件输出
输出 JSON 时要注意编码和保存格式:
- 中文正常显示:PowerShell 6+ 默认 UTF-8;旧版 Windows PowerShell 可加
-Encoding UTF8(需 PowerShell 5.1+) - 保存到文件:
Get-Service | ConvertTo-Json -Depth 5 | Out-File services.json -Encoding UTF8 - 避免 BOM:若下游系统(如某些 API)不兼容 BOM,用
[System.Text.Encoding]::UTF8显式指定无 BOM 编码
反向操作:从 JSON 重新还原为对象
如果后续还需处理,可用 ConvertFrom-Json 把 JSON 字符串变回 PowerShell 对象:
$json = Get-Content config.json -Raw$obj = $json | ConvertFrom-Json- 之后就能用点号访问:
$obj.database.host,前提是原始 JSON 层级在转换时没被截断


















