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

