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

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"
  • 异常现象:
    1. 前两行执行正常,能完成JSON转对象并输出内容
    2. 第三行本该返回值YV1DZ8256D2390218,但实际输出空白
    3. 命令行执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:20:37