PowerShell使用ConvertTo-Json导出JSON时对象格式异常问题求解
问题原因
- 核心错误是未为
ConvertTo-Json指定Depth参数:PowerShell中ConvertTo-Json默认序列化深度仅为2,你的JSON结构是「根对象→楼层对象→点位数组→数组内的用户对象」,总层级达到3,超过默认深度后,PowerShell会自动将超出深度的对象调用ToString()转为字符串格式,就是你看到的@{date=xxx; user=xxx}的异常结果。 - 次要问题:你当前代码中的文件写入逻辑被注释,重试逻辑没有实际触发写入操作,不会产生任何报错;写入文件时建议指定UTF8编码,避免跨环境读取时出现编码异常。
修正后的完整代码
function Save($floor, $place, $date, $user){ $content = Get-Content "$psscriptroot\bookings.json" | ConvertFrom-Json $newItem = [pscustomobject]@{ date = $date user = $user } $content.$floor.$place += $newItem # 输出验证结果 $content.$floor.$place $write = $false while(!$write){ Try{ # 显式指定序列化深度,指定编码为UTF8 $content | ConvertTo-Json -Depth 3 | Out-File "$psscriptroot\bookings.json" -Encoding utf8 $write = $true } catch { $write = $false # 可选:增加重试延迟,避免短时间重复尝试占用文件 Start-Sleep -Milliseconds 200 } } }
验证说明
调用Save 8 p01 "02.03.2021" "bla"后,导出的JSON结构会和你原始输入的结构完全一致,数组内的元素会保留为对象格式,可以正常读取解析。
内容的提问来源于stack exchange,提问作者CrommCruach
相关产品推荐
相关产品推荐

