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

PowerShell转换为JSON时无法得到预期嵌套数组结构如何解决

PowerShell生成目标JSON结构的修正方案

问题根因

  • ArrayList.Add() 方法默认会返回新元素的索引值,这是输出开头多余0的来源
  • 往$step数组中添加元素时额外套了一层steps键,导致JSON多了不必要的嵌套
  • 原代码中activeDbCatalog值为全小写demodb,和预期的demoDb大小写不匹配

修正后完整代码

$stepBase = @{}
$step = New-Object System.Collections.ArrayList

$wizardData = @{
    "mode" = "Add"
    "resourceName" = "basicServer"
    "serverName" = "demoServer"
    "serverAddress" = "xyz.abc.info"
    "activeDbCatalog" = "demoDb"
}

$stepData = @{"wizardType" = "baseServer"; "wizardData" = $wizardData}
$stepTypeData = @{"stepType" = "runWizard"; "stepData" = $stepData}

# 忽略Add方法返回的索引值,直接添加目标对象不套多余层级
[void]$step.Add($stepTypeData)

$stepBase.Add("steps", $step)
$stepBase | ConvertTo-Json -Depth 10

可选优化

如果需要JSON中键的顺序和代码定义的顺序完全一致,可以将所有普通哈希表@{}替换为有序字典[ordered]@{},PowerShell默认哈希表为无序结构,有序字典可以保留定义时的键顺序。

输出结果

{
  "steps": [
    {
      "stepType": "runWizard",
      "stepData": {
        "wizardType": "baseServer",
        "wizardData": {
          "serverAddress": "xyz.abc.info",
          "activeDbCatalog": "demoDb",
          "resourceName": "basicServer",
          "mode": "Add",
          "serverName": "demoServer"
        }
      }
    }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:24:02