You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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]存在两个问题:

  1. .software后多了空格和点号,不符合jq的属性访问语法
  2. 动态属性访问的正确格式是对象[变量],而非对象.[变量]

内容的提问来源于stack exchange,提问作者Saltaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:03:21