求助:在PowerShell中将无效JSON转换为有效JSON的方法
PowerShell追加JSON生成无效格式的修复
问题现象
使用PowerShell变量动态追加写入JSON文件时,生成了无效JSON——文件内容是两个独立的JSON对象拼接,而非单个包含多个键的有效JSON对象:
生成的无效JSON
{ "B21E7": [ { "car": 35761, "tire": 1 }, { "car": 36532, "tire": 1 } ] } { "B21E7": [ { "car": 35761, "tire": 1 }, { "car": 36532, "tire": 1 } ] }
期望的有效JSON格式
{ "B21E7": [ { "car": 35761, "tire": 1 }, { "car": 36532, "tire": 1 } ], "B21E7": [ { "car": 35761, "tire": 1 }, { "car": 36532, "tire": 1 } ] }
当前使用的代码
$track = @(@{$code.keyFull = $values }) Write-Output $track | ConvertTo-Json -depth 100 | Out-File -FilePath track.json -Append
解决方案
直接追加ConvertTo-Json的输出会导致多个独立JSON对象拼接,违反JSON规范。正确的做法是先读取现有JSON数据、合并新内容,再整体写入:
# 构造新的键值对数据 $newData = @{ $code.keyFull = $values } # 读取现有JSON文件,若无则初始化空哈希表 $existingData = if (Test-Path track.json) { Get-Content track.json -Raw | ConvertFrom-Json -AsHashtable } else { @{} } # 将新数据合并到现有对象中 $existingData += $newData # 转换为JSON并覆盖写入文件 $existingData | ConvertTo-Json -Depth 100 | Out-File track.json
说明
- 禁止直接用
-Append写入JSON片段:ConvertTo-Json每次输出完整JSON对象,追加会破坏结构 - 使用
-AsHashtable:将JSON转换为可修改的哈希表,方便合并键值对(默认转换的PSCustomObject无法直接追加键) - 覆盖写入:确保最终文件是单个完整的JSON对象
内容的提问来源于stack exchange,提问作者jonh bishop
相关产品推荐
相关产品推荐

