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

PowerShell操作JSON添加列表异常:Tags变为字符串而非数组

PowerShell添加JSON数组元素时数组被扁平化的解决办法

问题重现

初始JSON文件(def.json):

{
  "Name": "Job1",
  "Tasks": []
}

执行的PowerShell代码:

$json = Get-Content .\def.json | ConvertFrom-Json
$task = @{"TaskName"="New task";"Tags" = @('R2.0','R2.1')}
$json.Tasks += $task
$json | ConvertTo-Json

实际输出(Tags被转为空格分隔的字符串):

{
    "Name":  "Job1",
    "Tasks":  [
                  {
                      "TaskName":  "New task",
                      "Tags":  "R2.0 R2.1"
                  }
              ]
}

预期输出(Tags保持数组结构):

{
    "Name":  "Job1",
    "Tasks":  [
                  {
                      "TaskName":  "New task",
                      "Tags": [
                                   "R2.0",
                                   "R2.1"
                              ]
                  }
              ]
}

解决方案

问题出在ConvertTo-Json的默认深度限制上:PowerShell中ConvertTo-Json默认只处理2层嵌套,当嵌套层级超过2时,会自动将深层数组转换为字符串形式。

修正代码只需添加-Depth参数,指定足够的嵌套深度(这里至少为3):

$json = Get-Content .\def.json | ConvertFrom-Json
$task = @{"TaskName"="New task";"Tags" = @('R2.0','R2.1')}
$json.Tasks += $task
$json | ConvertTo-Json -Depth 3

也可以用[PSCustomObject]创建任务对象,效果一致,核心还是要指定-Depth:

$json = Get-Content .\def.json | ConvertFrom-Json
$task = [PSCustomObject]@{
    TaskName = "New task"
    Tags = @('R2.0','R2.1')
}
$json.Tasks += $task
$json | ConvertTo-Json -Depth 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:48:14