如何在PowerShell中避免JSON数组被置为null
解决PowerShell中删除所有JSON数组元素后字段变为null的问题
当你通过Where-Object过滤JSON里的Tasks数组时,如果所有元素都被过滤掉,PowerShell会返回$null而非空数组,导致ConvertTo-Json将Tasks字段序列化为null,进而引发其他工具的兼容性问题。
解决方案
过滤完成后检查结果,若为空则将Tasks字段显式设置为空数组@(),而非保留$null。
修改后的完整代码
# 读取并解析JSON文件 $Job = Get-Content -Path '.\Job.json' | ConvertFrom-Json # 过滤掉Task为1和2的元素,用-notin简化多次Where-Object操作 $filteredTasks = $Job.Tasks | Where-Object { $_.Task -notin 1, 2 } # 若过滤后无元素,设置为空数组;否则使用过滤结果 $Job.Tasks = if ($filteredTasks) { $filteredTasks } else { @() } # 转换为JSON并写入文件 $Job | ConvertTo-Json -Depth 2 | Out-File -Path '.\Job.json'
说明
- 使用
-notin运算符可一次性排除多个Task值,替代两次独立的Where-Object调用,代码更简洁高效。 - 显式设置空数组
@()后,ConvertTo-Json会将Tasks字段序列化为"Tasks": [],符合其他工具对数组类型的预期。 - 无需使用ArrayList或手动操作索引,通过判断过滤结果并赋值空数组即可解决问题。
内容的提问来源于stack exchange,提问作者Pulkownik
相关产品推荐
相关产品推荐

