PowerShell中如何用数组存储的键路径字符串提取嵌套JSON对应值
解决方案
你之前的代码存在两个核心问题:
- 遍历哈希表得到的
$_是DictionaryEntry类型,需要取它的Key属性才能拿到root.branch.setting1这类路径字符串 - PowerShell不支持直接将带点的拼接路径作为属性链访问对象,需要拆分路径逐层取值
可直接运行的实现代码
$AccountService.GetEnumerator() | ForEach-Object { # 拆分路径为层级数组 $segments = $_.Key -split '\.' # 逐层遍历取值 $targetValue = $json foreach ($seg in $segments) { $targetValue = $targetValue.$seg } # 输出符合要求的格式 [PSCustomObject]@{ Val = $targetValue } }
运行上述代码就会输出你预期的Val列,值分别对应Val1、Val2、Val3。
简化写法(可选)
如果你习惯用Select-Object的计算属性语法,可以用下面的简写版本:
$AccountService.Keys | ForEach-Object { $json | Select-Object @{ Name = 'Val' Expression = { ($_ -split '\.').ForEach({$v = $json}, {$v = $v.$_}); $v } } }
内容的提问来源于stack exchange,提问作者Rasimus.84
相关产品推荐
相关产品推荐

