批处理脚本获取JSON中指定商品的库存、价格及折扣价
用Batch脚本提取指定ID的JSON商品字段解决方案
Batch本身不是为JSON解析设计的,纯字符串截取容易因JSON结构变化(字段顺序、嵌套、空格)出错,推荐以下两种可靠方案:
方案1:调用Windows自带PowerShell解析(无额外依赖)
利用PowerShell的原生JSON处理能力,在Batch脚本中直接调用,示例如下:
@echo off setlocal enabledelayedexpansion :: 配置参数:JSON文件路径和目标ID set "JSON_PATH=nzxt_products.json" set "TARGET_ID=260" :: 调用PowerShell提取目标字段 for /f "delims=" %%o in ('powershell -Command "$json = Get-Content '%JSON_PATH%' -Raw | ConvertFrom-Json; $match = $json | Where-Object { $_.id -eq %TARGET_ID% }; if ($match) { Write-Output 'Stock: $($match.stock)'; Write-Output 'Original Price: $($match.price)'; Write-Output 'Discounted Price: $($match.discounted_price)' } else { Write-Output 'No product found with ID %TARGET_ID%' }"') do ( echo %%o ) endlocal
说明:
- 如果你的JSON中产品是嵌套在某个数组下(比如
products数组),只需把$json | Where-Object改为$json.products | Where-Object,根据实际JSON结构调整即可。 - 该方案无需额外安装工具,所有Windows系统自带PowerShell。
方案2:使用轻量第三方工具jq(简洁高效)
如果可以安装轻量JSON处理工具jq(Windows版可直接下载exe放到系统PATH或脚本同目录),脚本会更简洁:
@echo off set "JSON_PATH=nzxt_products.json" set "TARGET_ID=260" :: 用jq筛选并提取指定字段 jq --arg target_id "%TARGET_ID%" '.[] | select(.id == ($target_id | tonumber)) | {stock, price, discounted_price}' "%JSON_PATH%"
说明:
.[]用于遍历JSON数组中的每个产品项;select(.id == ($target_id | tonumber))筛选ID匹配的项(tonumber确保数字类型匹配,避免字符串ID的问题);{stock, price, discounted_price}仅输出需要的三个字段。
为什么纯Batch字符串截取不可行?
纯Batch依赖字符串匹配截取的方式容错率极低:JSON的字段顺序不固定、可能存在嵌套结构、空格/换行格式变化,以及同名字段的干扰,都会导致截取逻辑失效,因此不推荐使用。
内容的提问来源于stack exchange,提问作者Dapkz
相关产品推荐
相关产品推荐

