You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:00:02