powershell原生支持json处理,核心为convertfrom-json与convertto-json,需注意-raw读取、utf8编码、bom问题,点号访问嵌套结构,-depth 100确保深度序列化,数组操作用+=、索引或where-object。
powershell 原生支持 json 处理,不需要额外安装模块。核心靠 convertfrom-json 读取解析、convertto-json 写回生成,关键在编码、深度和结构操作这三点上。
正确读取本地 JSON 文件
很多配置文件(比如 Windows Terminal 的 settings.json)必须用 -Raw 一次性读成完整字符串,否则换行会被拆成数组,ConvertFrom-Json 会报错:
- 加
-Raw:确保整块内容传入解析器 - 显式指定
-Encoding UTF8:避免中文或特殊符号乱码或解析失败 - 注意 BOM:带 BOM 的 UTF-8 文件可能出错,建议用 VS Code 或 Notepad++ 保存为“UTF-8 无 BOM”
安全解析并访问嵌套数据
JSON 解析后变成 PSCustomObject,支持点号链式访问,但深层结构容易出错:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 数组用索引:
$cfg.profiles.list[0].name - 字典键用点号:
$cfg.colorSchemes."Campbell" - 访问前先检查是否存在:
if ($cfg.psobject.Properties.Name -contains 'defaultProfile') { ... } - 用
try/catch捕获语法错误,防止脚本中断:try { $cfg = Get-Content $path -Raw -Encoding UTF8 | ConvertFrom-Json } catch { Write-Error "JSON 格式异常" }
修改后写回并保留完整结构
直接点号赋值可修改属性,但写回时默认深度只有 2 层,嵌套深的配置(如 profiles.list、colorSchemes)会丢失数据:
- 必须加
-Depth 100:保证所有层级都序列化出来 - 加
-Compress可输出单行紧凑格式,方便比对和减小体积 - 写入时仍需指定
-Encoding UTF8,保持一致性 - 示例:
$cfg | ConvertTo-Json -Depth 100 -Compress | Set-Content $path -Encoding UTF8
处理数组与新增对象
像 profiles.list 这类数组字段,不能直接用 = 覆盖,得用追加方式:
- 新增项用
+=:$cfg.profiles.list += [PSCustomObject]@{ name="New"; commandline="pwsh.exe" } - 替换某一项可用索引:
$cfg.profiles.list[0].name = "Renamed" - 删除某项可用
Where-Object过滤重建:$cfg.profiles.list = $cfg.profiles.list | Where-Object { $_.name -ne "Old" }










