如何在PowerShell中用jq处理含$符号的JSON键并将结果存入数组变量
核心原因
PowerShell的符号解析、外部命令参数传递规则和类Unix shell不同:
- 第一种写法里PowerShell将
$ref识别为自身变量,未定义时默认展开为空,导致传给jq的表达式逻辑错误,返回全量JSON内容 - 第二种写法里PowerShell传递参数时自动吞掉了表达式内的双引号,导致jq收到的表达式存在语法错误
可行的命令写法
推荐用单引号包裹整个jq过滤表达式,将属性访问语法改为数组索引格式,内部单引号用两个单引号转义即可:
# 直接运行查看结果 jq '.. |.[''$ref'']? | select(. != null)' .\swagger.json
如果需要去掉返回值两端的引号,给jq添加-r参数:
jq -r '.. |.[''$ref'']? | select(. != null)' .\swagger.json
结果存入PowerShell数组
用@()包裹命令强制转换为数组,避免返回单条结果时变量类型为字符串:
# 存为字符串数组(带引号) $refList = @(jq '.. |.[''$ref'']? | select(. != null)' .\swagger.json) # 存为纯文本数组(不带引号) $refList = @(jq -r '.. |.[''$ref'']? | select(. != null)' .\swagger.json)
内容的提问来源于stack exchange,提问作者hunterex
相关产品推荐
相关产品推荐

