使用Bash变量结合jq提取JSON数据报错的技术问询
解决jq动态提取JSON属性的语法错误
你的JSON数据如下:
{ "result": { "run": { "runtime": "runc" }, "software": { "runc": "1.1.2", "kata": "1.3.7" } } }
当你尝试用变量动态提取对应runtime的版本时,原命令的语法不符合jq的属性访问规则,导致报错。
正确的命令写法
有两种可行的解决方式:
方式一:修正动态属性访问语法
runtime=$(jq -r '.result.run.runtime' input.json) jq --arg key "$runtime" '.result.software[$key]' input.json
注意要去掉.software和[$key]之间的空格与多余点号,jq中动态访问对象属性的正确格式是对象[动态键],无需额外的. 分隔。
方式二:一步完成关联查询(更简洁)
无需单独提取runtime值,直接在jq内部完成关联查询:
jq -r '.result.software[.result.run.runtime]' input.json
这种写法直接用.result.run.runtime的返回值作为键,去.result.software中匹配对应版本,避免了shell与jq的变量交互问题。
错误原因说明
原命令.result.software .[$key]存在两个问题:
.software后多了空格和点号,不符合jq的属性访问语法- 动态属性访问的正确格式是
对象[变量],而非对象.[变量]
内容的提问来源于stack exchange,提问作者Saltaf
相关产品推荐
相关产品推荐

