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

如何阻止ConvertFrom-Json展开单元素数组并正确处理空数组?

解决ConvertFrom-Json数组展开/空数组转null的问题

直接上可行方案,分版本适配:

PowerShell 6及以上(推荐)

用ConvertFrom-Json的-AsArray参数,强制把任何JSON数组(不管元素数量0、1还是多个)都反序列化为System.Object[]类型:

# 单元素JSON数组
$singleItemJson = '[{"number":1,"title":"Fix bug"}]'
$prs = ConvertFrom-Json $singleItemJson -AsArray
$prs.GetType()  # 输出 System.Object[]

# 空JSON数组
$emptyJson = '[]'
$emptyPrs = ConvertFrom-Json $emptyJson -AsArray
$emptyPrs.GetType()  # 输出 System.Object[],不会返回null

结合你的GitHub CLI场景,直接这么写就行:

# 拉取指定仓库的PR列表并强制转为数组
$prs = gh pr list --repo your-owner/your-repo --json number,title | ConvertFrom-Json -AsArray

# 统一遍历处理,不用写特殊逻辑
foreach ($pr in $prs) {
    Write-Host "PR #$($pr.number): $($pr.title)"
}

PowerShell 5.1兼容方案

如果还在使用PowerShell 5.1(没有-AsArray参数),用@()包裹结果,同时处理空数组返回null的情况:

# 单元素/多元素数组处理
$result = ConvertFrom-Json '[{"number":1}]'
$prs = @($result)

# 空数组处理
$emptyResult = ConvertFrom-Json '[]'
$emptyPrs = if ($null -eq $emptyResult) { @() } else { @($emptyResult) }

# 之后统一按数组逻辑处理即可

原理说明

ConvertFrom-Json默认的“智能”行为是:当JSON数组只有一个元素时自动展开为单个对象,空数组则返回$null,这是为了交互式使用方便,但批量处理(比如聚合多仓库PR)时会增加额外判断逻辑。通过上述方法可以强制统一为数组类型,省去特殊处理的麻烦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:22:47