PowerShell解析含特殊字符与动态节点的JSON文件问题
解决PowerShell解析JSON的两个核心问题
问题1:解析含/的节点名称
节点名称中的/无需特殊转义,直接用双引号包裹变量拼接的键名即可访问,前提是$WorkflowName变量已正确赋值(比如示例中的Test_email)。
问题2:处理名称不固定的节点
PowerShell点语法不支持用通配符*直接匹配动态键名,需通过遍历目标父节点的所有属性来定位。可根据节点特征(如type字段或path字段)筛选,确保精准命中目标。
修正后的PowerShell脚本
# 假设$Workflow_Info是从REST API获取后已转换为PSObject的对象(不要提前转成JSON字符串) $WorkflowName = "Test_email" # 替换为实际工作流名称 # 定位含斜杠的节点 $workflowDefinition = $Workflow_Info.properties.files."$WorkflowName/workflow.json".definition # 遍历actions下的动态节点,筛选目标(二选一即可) # 方式1:按type字段筛选ApiConnection类型的节点 $targetAction = $workflowDefinition.actions.PSObject.Properties.Value | Where-Object { $_.type -eq "ApiConnection" } # 方式2:按path字段精准匹配(多ApiConnection节点时更可靠) # $targetAction = $workflowDefinition.actions.PSObject.Properties.Value | Where-Object { $_.inputs.path -eq "/v2/SharedMailbox/Mail" } # 获取最终目标值 $referenceName = $targetAction.inputs.host.connection.referenceName Write-Host "目标referenceName的值:$referenceName"
关键注意事项
- 不要提前将
$Workflow_Info转换为JSON字符串(测试脚本中ConvertTo-Json操作多余,会破坏PSObject结构导致无法用点语法访问) .PSObject.Properties.Value可获取对象的所有子属性值,完美适配动态键名场景- 含
/的键名直接用双引号包裹变量拼接字符串即可访问,无需额外转义
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

