如何在PowerShell中遍历多维JSON对象并提取指定字段?
PowerShell多维JSON遍历解决方案
针对第一层JSON结构的处理
你的原始JSON是三层嵌套数组,原代码仅遍历到第二层,无法获取最内层的键值对。需要增加一层循环访问最内层数组,或直接通过索引提取元素,修改后的代码如下:
# 将JSON字符串转换为PowerShell对象 $data = @" [ [ [ "test-1234", "2023-07-11T04:00:24+00:00" ] ], [ [ "sb-00091", "2023-07-11T04:00:21+00:00" ] ] "@ | ConvertFrom-Json # 遍历并构造自定义对象 $output = foreach ($level1 in $data) { foreach ($level2 in $level1) { [PSCustomObject]@{ a = $level2[0] b = $level2[1] } } } # 格式化输出为表格 $output | Format-Table -AutoSize
执行后输出符合预期的格式:
a b ---- --------------------------- test-1234 2023-07-11T04:00:24+00:00 sb-00091 2023-07-11T04:00:21+00:00
针对第二层JSON结构的处理
当最内层数组包含嵌套对象时,通过.操作符直接访问对象属性即可,代码示例:
# 转换JSON为PowerShell对象 $data2 = @" [ [ [ "test-1234", "2023-07-17T04:00:18+00:00", { "Code": 8, "Name": "running" } ] ], [ [ "sb-00091", "2023-07-17T04:00:16+00:00", { "Code": 16, "Name": "running" } ] ] "@ | ConvertFrom-Json # 遍历提取所有字段 $output2 = foreach ($level1 in $data2) { foreach ($level2 in $level1) { [PSCustomObject]@{ a = $level2[0] b = $level2[1] c = $level2[2].Code d = $level2[2].Name } } } # 格式化输出 $output2 | Format-Table -AutoSize
输出结果:
a b c d ---- --------------------------- -- ------- test-1234 2023-07-17T04:00:18+00:00 8 running sb-00091 2023-07-17T04:00:16+00:00 16 running
学习资源推荐
- PowerShell官方文档的JSON处理模块,详细讲解
ConvertFrom-Json、ConvertTo-Json用法及对象遍历技巧 - 《Learn PowerShell in a Month of Lunches》:入门级书籍,有专门章节覆盖JSON数据处理和对象操作
- 《PowerShell Cookbook》:进阶参考,包含多种复杂数据结构的处理场景,适合解决实际问题
内容的提问来源于stack exchange,提问作者Money Times
相关产品推荐
相关产品推荐

