【问题标题】:sort_by on array elements gives error 'Cannot index string with string "key"'数组元素上的 sort_by 给出错误“无法使用字符串“键”索引字符串”
【发布时间】:2020-11-17 11:07:41
【问题描述】:

我正在尝试通过拉取请求 ID 获取代码扫描的状态,但我无法获取状态的值。 json 文件如下所示。

{
"pullRequests": [
{
  "key": "11346",
  "title": "feature/XXX-Validation",
  "branch": "feature/XXX-Validation",
  "base": "develop",
  "status": {
    "qualityGateStatus": "OK",
    "bugs": 0,
    "vulnerabilities": 0,
    "codeSmells": 1
  },
  "analysisDate": "2020-07-27T14:22:36+0000",
  "url": "https://abc/org/_git/repo/pullrequest/11346",
  "target": "develop"
},
{
  "key": "11151",
  "title": "feature/xxx-data",
  "branch": "feature/xxx-data",
  "base": "develop",
  "status": {
    "qualityGateStatus": "OK",
    "bugs": 0,
    "vulnerabilities": 0,
    "codeSmells": 0
  },
  "analysisDate": "2020-07-22T11:11:11+0000",
  "url": "https://abc/org/_git/repo/pullrequest/11151",
  "target": "develop"
}
]
}

我需要按键值对这个 json 进行排序(因为这是最简单的方法 - 之前我曾尝试按 analysisDate 排序)并获取该键的 qualityGateStatus 值。

我尝试使用此命令首先按 key 或 analysisDate 排序,然后尝试使用 key,但我不断收到错误消息。我想也许值不是字符串,所以尝试将键映射到数字,但仍然不起作用。

jq: error (at <stdin>:0): Cannot index string with string

尝试过的命令:

jq '.pullRequests[] |sort_by(.analysisDate)[-1].key'
jq '.pullRequests[] | sort_by(.key|tonumber)'

错误:

jq: error (at :0): Cannot index string with string "key"

【问题讨论】:

    标签: json sorting jq


    【解决方案1】:

    内置的sort_by 接受一个数组作为输入,而不是一个对象流。你需要做的:

    jq '.pullRequests | sort_by(.key)'
    

    【讨论】:

    • 谢谢!现在,如果我想通过最高键获得拉取请求的 qualityGateStatus,我正在尝试 jq '.pullRequests | sort_by(.key)[0].qualityGateStatus' 但我得到了空值。
    • qualityGateStatusstatus的成员,你需要做jq '.pullRequests | sort_by(.key)[0].status.qualityGateStatus'
    【解决方案2】:

    如果如 cmets 所示,实际目标本质上是通过 .key 找到最大值,那么使用 max_by 而不是 sort_by 会更好。根据 cmets,以下内容就足够了:

    .pullRequests
    | max_by(.key).status.qualityGateStatus
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      相关资源
      最近更新 更多