PowerShell读取JSON文件特定键值失败问题求助
问题分析与解决:PowerShell读取JSON特定值失败
问题描述
- 有一个存储车辆数据的大型JSON文件,目标提取车辆识别码VIN(对应key为
coc_VIN) - 编写的PowerShell代码如下:
$json = Get-Content $responsefilepath | ConvertFrom-Json Write-Host $json Write-Host $json.values | Where-Object key -eq "coc_VIN"
- 异常现象:
- 前两行执行正常,能完成JSON转对象并输出内容
- 第三行本该返回值
YV1DZ8256D2390218,但实际输出空白 - 命令行执行
Get-Content .\data\02-returned\sample.json | ConvertFrom-Json能正常显示所有数据表格,但追加| Where-Object key -eq "coc_VIN"后仍返回空白
原因分析
从JSON结构来看,顶层对象包含一个名为values的数组,数组内每个元素是带有key和value属性的对象。之前的错误点:
- 直接对顶层JSON对象使用
Where-Object key -eq "coc_VIN",但顶层对象本身没有key属性,过滤自然无结果 - 代码中
Write-Host $json.values | Where-Object的写法错误:Write-Host会把对象转为字符串输出,后续的Where-Object无法对字符串进行属性过滤
解决方法
需要先定位到values数组,再对数组内的元素过滤,最后提取目标值:
修正后的脚本代码
# 读取并转换JSON为对象 $json = Get-Content $responsefilepath | ConvertFrom-Json # 过滤出key为coc_VIN的元素,提取其value值 $vin = $json.values | Where-Object { $_.key -eq "coc_VIN" } | Select-Object -ExpandProperty value # 输出VIN值 Write-Host $vin
命令行直接执行的正确写法
Get-Content .\data\02-returned\sample.json | ConvertFrom-Json | Select-Object -ExpandProperty values | Where-Object { $_.key -eq "coc_VIN" } | Select-Object -ExpandProperty value
关键说明
- 必须先通过
$json.values或Select-Object -ExpandProperty values拿到目标数组,再对数组元素进行过滤 Where-Object的脚本块中,要用$_.key引用当前数组元素的key属性- 使用
Select-Object -ExpandProperty value可以直接提取出字符串形式的VIN值,而非带属性的对象
内容的提问来源于stack exchange,提问作者Torben Gundtofte-Bruun
相关产品推荐
相关产品推荐

