PowerShell使用ConvertFrom-JSON转JSON为对象后无法正确访问属性怎么办
问题根因与修复方案
错误点1:JSON变量定义格式错误
你当前用{}包裹JSON内容,在PowerShell中{}默认代表脚本块类型,并非ConvertFrom-Json要求的字符串输入类型,需要先将JSON内容修改为合法字符串,推荐使用PowerShell多行here-string写法:
$results = @" { "status": "FINISHED", "data": { "results": [ { "id": "11565C230500", "custom": { "image": "XXXX", "name": "XXXX", "articleNumber": "4032423423505" } }, { "id": "22739L5F16243", "custom": { "image": "XXXX", "name": "XXXX", "articleNumber": "4032423423505" } }, { "id": "3304332724004", "custom": { "image": "XXXX", "name": "XXXX", "articleNumber": "4032423423505" } } ] } } "@
错误点2:变量名拼写错误
你定义的JSON存储变量名为$results,但调用ConvertFrom-Json时传入的参数是$result,缺少末尾的s,导致传入空值,转换后无法得到预期对象。正确转换代码如下:
$resultObject = ConvertFrom-Json -InputObject $results
错误点3:对象属性访问路径错误
ConvertFrom-Json转换后的对象层级和输入JSON结构完全对应:
- 根对象第一层仅包含
status、data两个属性(你观察到的转换结果完全正常,并非转换逻辑出错) data属性下才包含results数组,数组的每一个元素才具备id、custom属性
你直接访问$resultObject.id属于访问根对象不存在的属性,自然返回空值。正确的筛选代码如下:
# 先定位到data下的results数组,再筛选对应id的元素 $targetItem = $resultObject.data.results | Where-Object { $_.id -eq '11565C230500' } # 后续可直接访问内部属性,示例:获取对应商品编码 $targetItem.custom.articleNumber
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

