PowerShell中统计JSON响应里acc_name字段值的出现次数
PowerShell统计JSON响应中值的出现次数
我在PowerShell中编写了一段foreach循环用于遍历JSON响应,代码如下:
foreach ($myvar in $response) { $getvalues = $myvar.acc_name Write-Host $getvalues }
当前输出结果为每行一个值:
abc abc www abc bbb abc
我需要添加代码统计各值的出现次数,并按以下格式输出结果:
abc 4 www 1 bbb 1
解决方案
方法一:使用PowerShell内置的Group-Object命令(推荐)
这是最简洁高效的方式,利用PowerShell原生命令完成分组统计:
# 提取所有acc_name值,分组后输出名称和次数 $response | ForEach-Object { $_.acc_name } | Group-Object | ForEach-Object { Write-Host "$($_.Name) $($_.Count)" }
或者更精简的写法:
($response | Select-Object -ExpandProperty acc_name) | Group-Object | ForEach-Object { "$($_.Name) $($_.Count)" }
Group-Object会自动将相同的值归类,每个分组对象包含Name(分组的目标值)和Count(该值出现的次数),直接遍历输出即可。
方法二:手动用哈希表统计
如果想保留原foreach循环的结构,可以通过哈希表手动计数:
# 创建空哈希表存储计数 $counts = @{} foreach ($myvar in $response) { $getvalues = $myvar.acc_name # 对应值的计数加1,不存在则默认初始化为1 $counts[$getvalues]++ } # 遍历哈希表输出结果 foreach ($key in $counts.Keys) { Write-Host "$key $($counts[$key])" }
哈希表的键对应acc_name的值,值对应出现的次数,每次循环更新计数,最后遍历输出。
内容的提问来源于stack exchange,提问作者Nisheeth
相关产品推荐
相关产品推荐

