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

PowerShell自定义对象转有效JSON文件输出格式异常如何修复

故障原因

代码存在两处核心错误:

  • 层级定位错误:每个record*节点对应的值是包裹单个业务对象的数组,原代码直接操作外层数组、直接读取数组的contents属性,没有定位到数组内的实际业务对象,导致属性添加位置错误,后续序列化时对象被转成PowerShell原生对象字符串格式。
  • 序列化深度不足:PowerShell的ConvertTo-Jsoncmdlet默认序列化深度仅为2层,你的JSON结构层级(根节点→records→record数组→业务属性对象)超过默认深度限制,深层对象会被强制转换为字符串输出,就是你看到的@{key=value}格式。
修正后可直接运行的代码
$infile = "C:\Temp\input.json"
$outfile = "C:\Temp\output.json"

$json = Get-Content $infile -Encoding UTF8 | ConvertFrom-Json
$records = $json.records

$records.PSObject.Properties | ForEach-Object {
    # 取数组内的实际业务对象,每个record数组仅含1个元素,直接取索引0
    $targetEntry = $_.Value[0]
    # 计算contents字段的字符长度
    $contentLength = $targetEntry.contents.Length
    # 给目标对象新增length属性
    $targetEntry | Add-Member -Type NoteProperty -Name 'length' -Value $contentLength
}

# 指定足够的序列化深度,避免深层对象被转成字符串
$json | ConvertTo-Json -Depth 10 | Out-File $outfile -Encoding UTF8
效果说明

运行后输出的JSON完全符合预期:

  • length字段被正确添加到每个业务对象中,和locale、category、contents同级
  • 输出为标准JSON格式,不会出现@{}格式的PowerShell对象字符串
  • 长度计算结果和你给出的预期值完全一致。

内容的提问来源于stack exchange,提问作者Nemo XXX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:18:23