PowerShell中使用ForEach访问嵌套JSON对象并生成表格的问题
问题:访问嵌套JSON对象并生成表格展示任务详情
我现在搞不懂怎么访问嵌套对象里的项,想要把这些嵌套项的详情以表格形式展示出来,具体要显示"One"、"Two"、"Three"这三个任务的详情。
提供的JSON数据
{ "ToCover":{ "ToDo":{ "One":{ "ID":1, "Task": "Bezlio & Handheld testing", "Comment":"", "InProgress": "In Progress" }, "Two":{ "ID":2, "Task": "Crystal Default reports to SSRS default", "Comment":"Moved all", "InProgress": "Complete" }, "Three":{ "ID":3, "Task": "new system Install", "Comment": "Delayed", "InProgress": "In Progress" } } } }
当前使用的PowerShell脚本
$test = foreach ($task in $json.ToCover.ToDo){ foreach($item in $task){ foreach($detail in $item){ $detail } } } $test
期望实现的效果
希望能直接获取三个任务的完整对象并输出为表格,类似手动指定每个任务的写法:
$table = foreach ($task in $json.ToCover.ToDo){ $json.ToCover.ToDo.One $json.ToCover.ToDo.Two $json.ToCover.ToDo.Three }
解决方案
你不需要多层嵌套循环,$json.ToCover.ToDo是包含任务对象的集合,直接提取其中的任务对象即可让PowerShell自动生成表格:
方法1:通过PSObject.Properties.Value获取所有任务对象
# 先将JSON转换为PowerShell对象(如果还没转换的话) $json = Get-Content -Path "你的JSON文件路径" | ConvertFrom-Json # 直接提取所有任务对象并输出为表格 $json.ToCover.ToDo.PSObject.Properties.Value
方法2:遍历ToDo的属性名获取对应任务
$json.ToCover.ToDo | Get-Member -MemberType NoteProperty | ForEach-Object { $json.ToCover.ToDo.$($_.Name) }
运行任意一种方法,都会输出如下格式的表格:
ID Task Comment InProgress -- ---- ------- ---------- 1 Bezlio & Handheld testing In Progress 2 Crystal Default reports to SSRS default Moved all Complete 3 new system Install Delayed In Progress
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

