CMD批处理如何遍历含数组的JSON对象查找指定键值
Windows CMD批处理提取JSON指定数组内键值的实现方案
jq是当前CMD环境下处理JSON可靠性最高的工具,之前调用失败基本是过滤路径写法、CMD转义没处理到位,按下面的步骤写即可正常运行。
前置准备
- 下载Windows版本的
jq.exe,放到批处理脚本同级目录,或者加入系统PATH环境变量,保证CMD可直接调用jq命令
可直接复用的批处理代码
@echo off setlocal enabledelayedexpansion :: 按需修改以下三个配置项即可 set "JSON_PATH=your_file.json" set "TARGET_ARRAY_NAME=array1" set "TARGET_OBJECT_KEY=1" :: 遍历提取目标值 for /f "delims=" %%val in ('jq -r ".%TARGET_ARRAY_NAME%[].\"%TARGET_OBJECT_KEY%\"" "%JSON_PATH%" 2^>nul') do ( set "match_val=%%val" :: 取第一个匹配值就直接跳出循环,要拿所有匹配值就删掉下面这行 goto :output ) :output echo 提取结果:%match_val% endlocal
逻辑说明
- 核心jq过滤规则为
.目标数组名[].目标键名:[]语法会自动遍历指定数组下的所有对象,逐一提取对应键的值,不需要手动写循环遍历数组逻辑 - 参数
-r用于输出原始字符串,自动去掉JSON字符串值自带的包裹双引号,拿到的结果可以直接在批处理里使用 - 针对你给出的示例JSON,上述代码运行后会直接返回预期值
xx;如果需要获取数组内所有该键的对应值,删掉循环内的goto :output语句,在循环体中直接处理%%val即可
注意事项
- CMD环境下调用jq时,键名的双引号需要用反斜杠转义;for循环内的重定向符号
>需要加^转义,避免被CMD提前解析为命令重定向 - 不要尝试用原生批处理的字符串截取、正则匹配手写JSON解析逻辑,遇到转义字符、嵌套结构、值带特殊符号的场景必然出现解析错误,jq的JSON解析完全遵循官方规范,不存在兼容问题
内容的提问来源于stack exchange,提问作者MonkeyPower12
相关产品推荐
相关产品推荐

