Windows下.cmd脚本使用jq删除嵌套JSON指定键的问题求助
在Windows CMD中用jq删除JSON指定键的正确命令
核心注意事项
CMD的命令行解析规则和jq语法存在冲突,尤其是引号和特殊字符的处理——必须用双引号包裹jq的过滤表达式,避免CMD误解析内部语法。
1. 删除单个顶级键
以删除顶级键alternate_error_pages为例,命令如下:
jq-win64.exe "del(.alternate_error_pages)" input.json > temp.json && move /Y temp.json input.json
- 说明:
del()是jq的键删除函数,.alternate_error_pages指向目标顶级键;先输出到临时文件再替换原文件,防止直接重定向清空原文件。
2. 删除嵌套键
以删除.browser.app_window_placement.DevToolsApp为例,命令如下:
jq-win64.exe "del(.browser.app_window_placement.DevToolsApp)" input.json > temp.json && move /Y temp.json input.json
- 说明:嵌套路径直接用
.连接层级即可,jq会自动解析;同样用双引号包裹表达式,避免CMD干扰。
3. 一次性删除多个键
同时删除alternate_error_pages、autocomplete和嵌套的DevToolsApp,可在del()中用逗号分隔多个路径:
jq-win64.exe "del(.alternate_error_pages, .autocomplete, .browser.app_window_placement.DevToolsApp)" input.json > temp.json && move /Y temp.json input.json
常见错误排查
- del语法错误:大概率是没给jq表达式加双引号,CMD把
del当成了自身的文件删除命令,导致冲突。必须确保jq过滤逻辑被双引号完全包裹。 - 路径表达式无效:检查键名和层级是否准确;如果键名含特殊字符(空格、
-等),改用["键名"]形式,比如del(.browser["app_window_placement"]["DevToolsApp"])。
内容的提问来源于stack exchange,提问作者stacker1
相关产品推荐
相关产品推荐

