如何用PowerShell正确遍历多层JSON并输出指定成员信息?
解决PowerShell遍历多层JSON并按组输出成员信息的问题
假设的sample.json结构
先明确一个符合需求的sample.json示例结构(如果你的实际结构不同,对应调整路径即可):
{ "teams": { "GROUP1": [ { "name": "Alice Smith", "age": 32 }, { "name": "Bob Johnson", "age": 27 } ], "GROUP2": [ { "name": "Charlie Davis", "age": 35 }, { "name": "Diana Wilson", "age": 29 } ] } }
修正后的PowerShell脚本
保存为Get-GroupMembers.ps1即可实现需求:
param( [Parameter(Mandatory=$true)] [ValidateSet("GROUP1", "GROUP2")] [string]$GroupName ) # 读取并解析JSON文件 $jsonContent = Get-Content -Path "./sample.json" -Raw | ConvertFrom-Json # 定位目标组的成员列表 $groupMembers = $jsonContent.teams.$GroupName # 遍历输出成员姓名与年龄 if ($groupMembers) { Write-Host "=== 组 $GroupName 的成员信息 ===" foreach ($member in $groupMembers) { Write-Host "姓名: $($member.name),年龄: $($member.age)" } } else { Write-Host "未找到组 $GroupName 的信息" }
脚本说明
- 参数控制:通过
param定义必填参数,并用ValidateSet限制输入只能是GROUP1或GROUP2,避免无效值。 - JSON解析:
Get-Content -Raw读取完整JSON内容,ConvertFrom-Json将其转为PowerShell可直接访问的对象。 - 路径定位:
$jsonContent.teams.$GroupName直接定位到目标组的成员数组,若你的JSON中组的父节点不是teams,替换为实际节点名即可。 - 输出逻辑:判断目标组存在后,循环遍历成员数组,提取姓名和年龄属性输出。
运行方式
切换到脚本与JSON文件所在目录,在PowerShell中执行:
.\Get-GroupMembers.ps1 GROUP1
或:
.\Get-GroupMembers.ps1 GROUP2
常见问题排查
- JSON路径错误:若你的JSON组直接在根节点下,将
$jsonContent.teams.$GroupName改为$jsonContent.$GroupName。 - 文件路径问题:
Get-Content可使用绝对路径,避免因工作目录不同导致文件找不到。 - 参数缺失:脚本设置了必填参数,未传入时会自动提示输入组名。
内容的提问来源于stack exchange,提问作者Manojkumar Musunuru
相关产品推荐
相关产品推荐

