如何在Windows Cmder中执行jq多属性选择命令处理外部JSON文件
解决Cmder中jq复杂筛选命令的语法错误
问题根源
Cmder默认采用Windows CMD的命令解析逻辑,CMD不支持用单引号包裹命令参数,必须使用双引号。同时,表达式内部的双引号需要用**反斜杠()**转义,否则CMD会误将内部双引号识别为参数的结束标记,触发路径语法错误。
正确命令写法
针对你需要提取特定属性构造新对象的需求,修正后的命令如下:
jq ".[][] | {\"accountNumber\":.accountNumber, \"brand\":.brand, \"city\":.city, \"state\":.state}" sample.json --color-output
更简洁的替代方案
如果觉得转义引号过于繁琐,可以把jq表达式保存到一个文本文件(比如命名为filter.jq),内容如下:
.[][] | {accountNumber:.accountNumber, brand:.brand, city:.city, state:.state}
然后执行以下命令即可:
jq -f filter.jq sample.json --color-output
这种方式无需处理任何引号转义,逻辑更清晰。
额外注意事项
- 在CMD环境下,所有包含
|、{}、双引号等特殊字符的jq表达式,都必须用双引号包裹,内部的双引号要用\转义。 - 如果你后续修改Cmder配置切换到Git Bash等其他shell,引号规则会有所不同,但当前只需遵循CMD的规则即可。
内容的提问来源于stack exchange,提问作者NewJackSwing4Ever
相关产品推荐
相关产品推荐

