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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:17:10