You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中如何直接通过键名访问JSON嵌套值与数组元素

PowerShell 简洁访问JSON键值实现方案

PowerShell 原生支持极简的JSON属性访问语法,完全不需要循环遍历、手动操作PsObject.Properties,写法简洁度和Python基本一致。


第一步:解析webhook传入的JSON字符串

Azure 自动化Runbook被webhook触发时,请求内容会存放在内置参数$WebhookData中,首先用内置命令把JSON字符串转为PowerShell可直接访问的对象:

<#
  webhook传入的RequestBody是原始字符串格式,必须先做转换
  如果使用PowerShell 5.1运行时,建议追加 -Depth 10 参数,避免深层嵌套属性解析不全
  PowerShell 7.2+运行时无此问题,也是Azure Runbook目前推荐的运行时版本
#>
$json = $WebhookData.RequestBody | ConvertFrom-Json

第二步:按路径取值(完全等效Python逻辑)

你给出的Python示例代码,可直接对应为以下PowerShell写法,嵌套属性用点号分隔、数组索引用方括号,索引规则和Python一致从0开始计数:

# 对应 Python: substance = json["data"]["inventory_item"]["name"]
$substance = $json.data.inventory_item.name

# 对应 Python: vendor = json["data"]["inventory_item"]["vendor"]
$vendor = $json.data.inventory_item.vendor

# 对应 Python: sid = json["data"]["subids"][1]
# 注意:你提供的JSON结构中subids是inventory_item的子节点,不是data的直接子节点,路径不要写错
$sid = $json.data.inventory_item.subids[1]

# 其余嵌套属性都按「对象.一级键.二级键.数组[索引]」的格式写即可
$labName = $json.data.inventory_item.lab.name
$addUserEmail = $json.data.inventory_item.added_by.email

特殊场景写法

只有遇到键名包含空格、特殊字符,或者键名是动态变量的场景,才需要用引号包裹键名:

# 键名带空格/特殊字符
$specialVal = $json.data.inventory_item.'key with space'

# 动态键名(键名存在变量里)
$targetProp = "catalog_number"
$catalogNum = $json.data.inventory_item.$targetProp

实用避坑提示

  • 如果不确定某层节点是否存在,可以用空条件运算符?避免脚本报错,写法为$json.data.inventory_item?.name,中间任意层级缺失时会直接返回$null,不会终止脚本运行
  • PowerShell默认的JSON解析不会自动做类型转换,字符串、数字、数组类型会和原始JSON保持一致,不需要额外做类型处理
  • 不要用网上搜到的遍历属性、递归查找的写法,那些是处理未知结构JSON的方案,你这种结构固定的场景直接用点号访问性能最高、写法最简洁

内容的提问来源于stack exchange,提问作者vQuiche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:30:47