PowerShell解析含对象的JSON文件:按指定名称获取变量
PowerShell解析JSON文件的两个问题解决方案
问题1:根据对象名称获取对应变量集合
首先读取JSON文件并转换成PowerShell可操作的对象:
# 读取JSON文件并转换为PowerShell对象 $testPlans = Get-Content -Path "Test.json" -Raw | ConvertFrom-Json
指定目标对象名称后,直接通过键名访问即可获取对应变量集合:
# 定义要获取的对象名称 $targetPlanName = "My Test Plan A" # 获取该对象的所有变量 $targetPlan = $testPlans.$targetPlanName
此时$targetPlan就是包含所有变量的对象,可通过$targetPlan.VariableA查看单个值,或用$targetPlan | Get-Member -MemberType NoteProperty列出所有变量名。
问题2:以类似$(VariableA)的形式调用变量
有两种实用方法实现需求:
方法1:将变量导入当前作用域
遍历目标对象的属性,把每个属性转为当前作用域的变量:
# 遍历属性并创建对应变量 $targetPlan.PSObject.Properties | ForEach-Object { Set-Variable -Name $_.Name -Value $_.Value }
之后就能直接用$VariableA、$VariableB的形式调用,示例:
Write-Host "VariableA的值: $VariableA" Write-Host "VariableC的值: $VariableC"
方法2:直接通过对象属性插值调用
如果不想创建全局变量,可在字符串中直接通过对象属性访问,效果等价于$(VariableA):
Write-Host "VariableA的值: $($targetPlan.VariableA)" Write-Host "VariableD的值: $($targetPlan.VariableD)"
可选:优化JSON格式(若允许修改)
原格式可用,但如果需要批量处理计划,可改成数组结构更便捷:
[ { "PlanName": "My Test Plan A", "VariableA":"A", "VariableB":"B", "VariableC":"C", "VariableD":"D" }, { "PlanName": "My Test Plan B", "VariableA":"E", "VariableB":"F", "VariableC":"G", "VariableD":"H" } ]
这种格式下获取目标计划的代码可改为:
$testPlans = Get-Content -Path "Test.json" -Raw | ConvertFrom-Json $targetPlan = $testPlans | Where-Object { $_.PlanName -eq "My Test Plan A" }
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

