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
相关产品推荐
相关产品推荐

