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

批处理脚本获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:55:17