首页/系统/Windows 运维速查/ConvertTo-Json / ConvertFrom-Json
PowerShell 基础66 条

ConvertTo-Json / ConvertFrom-Json

对象与 JSON 互转:调 API、读配置、传结构化数据的必用工具;注意默认深度限制会导致嵌套截断。

Windows 运维速查系统更新于 2026-10-13

JSON 序列化与反序列化

ConvertTo-Json 把对象序列化成 JSON,ConvertFrom-Json 把 JSON 文本还原成对象。调用接口、读写配置、与外部程序交换结构化数据时几乎必用。要特别注意默认的深度限制:嵌套层数超过限制会被静默截断成字符串。

基本信息

适用平台Windows PowerShell 5.1 与 PowerShell 7
序列化<对象> | ConvertTo-Json -Depth 5
反序列化Get-Content 文件 -Raw | ConvertFrom-Json
深度限制默认 2,嵌套结构需按需加大
读取建议用 -Raw 整体读入再解析,避免按行拆分破坏结构
编码表现5.1 会把中文转义成编码序列,程序可正确解析但人读不友好

典型使用场景

  • 调用接口后解析返回内容,提取需要的字段
  • 读取配置文件并把其中的值传给脚本
  • 把对象导出成 JSON 交给其他系统消费
  • 与外部工具交换数据,避免自定义文本格式带来的解析歧义
  • 调试时把对象打印成 JSON,看清嵌套结构

常用示例

常用示例
# 对象转 JSON,注意深度
Get-Process -Id 4 | Select-Object Name, Id | ConvertTo-Json
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, OSArchitecture | ConvertTo-Json -Depth 3
# 读取 JSON 文件并取值,用 -Raw 整体解析
$cfg = Get-Content D:\cfg.json -Raw | ConvertFrom-Json
$cfg.Port
# 逐项处理解析出来的集合
(Get-Content D:\list.json -Raw | ConvertFrom-Json) | ForEach-Object { $_.Name }
# 写回文件时显式指定编码
$cfg | ConvertTo-Json -Depth 5 | Set-Content D:\cfg.out.json -Encoding UTF8

参数与影响

参数作用注意
-Depth序列化嵌套的最大深度超出会被截断成字符串形式
-Compress输出紧凑的单行 JSON便于传输,不便阅读
-AsArray结果始终为数组PowerShell 7 及以上可用
-Raw读取时整体读入再解析避免按行拆分破坏结构
-Encoding写入文件时的编码中文场景要显式指定
读取 JSON 文件时建议加 -Raw 整体读入再解析。按行读取会把内容拆成多行数组,结构被破坏后解析会失败或得到错误结果。
嵌套层数超过深度限制时不会报错,而是被静默转成字符串形式,问题往往在上层调用时才暴露。排查数据结构异常时先检查这个参数。

易错点

  • 嵌套超过深度限制会被静默截断,排查数据异常要先检查并加大深度
  • 读取文件不写 -Raw,多行 JSON 被拆成数组导致解析失败
  • 5.1 序列化中文时会转义成编码序列,人工查看像乱码但程序解析正常
  • 写入文件时未指定编码,中文在其它系统上读取时出现乱码
  • 只有一个元素的数组序列化后再解析会变成单个对象,处理时未做兼容就会出错

数据来源与参考

  • Microsoft Learn:ConvertTo-Json
  • Microsoft Learn:ConvertFrom-Json

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌